igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] Python's Graph.write_x producing empty files


From: Tamás Nepusz
Subject: Re: [igraph] Python's Graph.write_x producing empty files
Date: Tue, 14 Aug 2012 16:28:52 +0200

Great! At least now I know how to fix it - hopefully the nightly builds will 
include a solution in a few days.  

Thanks for all your help.

Best,--  
T.


On Tuesday, 14 August 2012 at 16:26, Alacast wrote:

> head test.net (http://test.net)
> *Vertices 3
> *Edges
> 1 2
> 2 3
>  
> That did it!
>  
>  
> On Tue, Aug 14, 2012 at 3:21 PM, Tamás Nepusz <address@hidden 
> (mailto:address@hidden)> wrote:
> > > Thanks! In the meantime, since I can use igraph to write the correct 
> > > format, and pipe it to sys.stdout, what would be the best hack for me to 
> > > pipe stdout to a file? It feels like another line of code could get the 
> > > functionality I need for the moment.
> >  
> >  
> > Well, it's a bit complicated. Since igraph's core is written in C and the 
> > functions that export a graph into a file require a FILE* object in the 
> > low-level C layer, it is not possible to use the standard Python trick, 
> > which would involve swapping sys.stdout with a file object created with the 
> > open() function and then swapping them back when igraph has saved 
> > everything. The only reason why sys.stdout works is because there is a 
> > standard protocol which tells igraph how to 'extract' a file handle from 
> > sys.stdout that we can pass on to igraph_write_graph_pajek in the C layer. 
> > The whole magic is in the igraphmodule_filehandle_init function in 
> > fileobject.c of the Python interface source code, and to be honest, I have 
> > no idea yet why it does not work on RHEL. The function essentially has two 
> > code paths: one that handles plain file names passed in strings, and one 
> > that handles Python's file-like objects such as sys.stdout. You have shown 
> > already that plain file names do not work for you, and
> > it was the same with passing in an object that was created with Python's 
> > open() function. Theoretically, sys.stdout is no different from any other 
> > file object created with open(), so that's why I think that this is pretty 
> > weird. The only difference I can think of right now is that sys.stdout 
> > auto-flushes the output to the screen after every newline character, while 
> > Python file objects do not necessarily do that.
> >  
> > Can you please try this code snippet:
> >  
> > f = open("test.net (http://test.net)", "w")
> > g.write_pajek(f)
> > f.flush()
> > f.close()
> >  
> > --
> > T.
> >  
> >  
> > _______________________________________________
> > igraph-help mailing list
> > address@hidden (mailto:address@hidden)
> > https://lists.nongnu.org/mailman/listinfo/igraph-help
>  
>  
> _______________________________________________
> igraph-help mailing list
> address@hidden (mailto:address@hidden)
> https://lists.nongnu.org/mailman/listinfo/igraph-help






reply via email to

[Prev in Thread] Current Thread [Next in Thread]