我正在运行一个Python脚本,用于在Windows 7上启动.bat文件。批处理文件运行一种蒙特卡罗程序2分钟。在这2分钟结束时,程序必须更新我将在同一Python脚本中读取的数据文件,对输出进行一些数据分析,并在必要时重新启动相同的.bat文件。
我在无限量的时间内完成此过程,直到获得满意的输出。
Python代码看起来像这样
import os
import numpy as np
os.system('myBatch.bat > messages.txt')
while True:
# force flushing
fd = open("output.txt",'a')
fd.flush()
os.fsync(fd.fileno())
fd.close()
# read data
data = np.loadtxt("output.txt")
# some data analysis ...
# testing
if dataSatisfactory:
break
else:
os.system('myBatch.bat > messages.txt')
正如您所看到的,我正试图强制刷新必须由批处理文件中的程序写入的 output.txt 文件。因为我无法控制这个已编译的可执行程序,所以在命令os.system('myBatch.bat > messages.txt')
之后输出文件没有得到更新,但只有在我终止整个python进程之后才会更新。
我尝试在#force flushing之后添加4行,但显然仍无效。
为了澄清,可执行文件的输入是 output.txt 以及输出,因此可执行文件必须覆盖文件 output.txt
文件 messages.txt 是将可执行文件的所有邮件从stdout重定向到 messages.txt 。
有任何建议或暗示吗?
注意:批处理文件看起来像这样
.\TheExecutable %output.txt
答案 0 :(得分:0)
os.system("TheExecutable.exe output.txt")
subprocess.check_output("TheExecutable.exe")
来返回该标准输出。有关从字符串而不是文件名加载的函数,请参阅the documentation of numpy.loadtxt()。
这样,你完全避免写作&读取/从磁盘读取。