我有一个 python 脚本,它调用系统程序并从文件读取输出out.txt
,作用于该输出并循环。然而,它不起作用,仔细调查发现,python脚本只是打开out.txt
一次,然后继续阅读旧版本。如何让 python 脚本在每次迭代时重新读取文件?我在这里看到了一个类似的问题,但它是关于一个与程序一起运行的 python 脚本,而不是调用它,并且该解决方案不起作用。我尝试在循环返回之前关闭文件,但它没有执行任何操作。
编辑:
我已经尝试过关闭和打开,但没有成功。这是代码:
import subprocess, os, sys
filename = sys.argv[1]
file = open(filename,'r')
foo = open('foo','w')
foo.write(file.read().rstrip())
foo = open('foo','a')
crap = open(os.devnull,'wb')
numSolutions = 0
while True:
subprocess.call(["minisat", "foo", "out"], stdout=crap,stderr=crap)
out = open('out','r')
if out.readline().rstrip() == "SAT":
numSolutions += 1
clause = out.readline().rstrip()
clause = clause.split(" ")
print clause
clause = map(int,clause)
clause = map(lambda x: -x,clause)
output = ' '.join(map(lambda x: str(x),clause))
print output
foo.write('\n'+output)
out.close()
else:
break
print "There are ", numSolutions, " solutions."
你需要冲洗foo
以便外部程序可以看到其最新的变化。当您写入文件时,数据会在本地进程中缓冲并以较大的块发送到系统。这样做是因为更新系统文件的成本相对较高。在您的情况下,您需要强制刷新数据,以便 minisat 可以看到它。
foo.write('\n'+output)
foo.flush()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)