2012-02-13 51 views
1

我正在写入另一个程序(gnuplot)的文件以用作输入。验证文件是否已准备好在py3k中读取

g = open('test.gnuplot', 'w') 
g.write("[snip]") 
g.close() 

os.system("sleep 1") 
os.system("gnuplot test.gnuplot") 

如果我省略了sleep 1 gnuplot的生成错位的文件 - 似乎是因为我刚写的文件不是“准备”,但(如果我错了,请告诉我真正的原因是什么)。

我猜测有一个更优雅的方式来等待文件准备好阅读,它是什么?

+1

尝试关闭您的防病毒软件并查看是否可以删除睡眠 – 2012-02-13 00:18:37

+1

假设您正在等待执行实际写入,如果在'g.close()之前调用'g.flush()',会发生什么情况? '?你可以把睡眠了吗?顺便说一句,你可以说'进口时间; Python中的time.sleep(')'。 – snim2 2012-02-13 00:20:43

+1

试试这个:'g.write(“[snip]”); g.flush(); os.fsync(g.fileno())'拿掉'os.system(“sleep 1”)'。我可能是错的,但我认为缓冲区还没有写入文件。请参阅:http://docs.python.org/library/os.html#os.fsync – 2012-02-13 00:28:06

回答

1

试试这个:

g = open('test.gnuplot', 'w') 
g.write("[snip]") 
g.flush() 
os.fsync(g.fileno()) 
os.system("gnuplot test.gnuplot") 

并带走os.system("sleep 1")。我认为缓冲区还没有写入文件。请参阅python fsync docs