gpt4 book ai didi

Python从磁盘刷新文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:19 25 4
gpt4 key购买 nike

我有一个 python 脚本,它调用系统程序并从文件 out.txt 读取输出,对该输出进行操作,然后循环。但是,它不起作用,仔细调查表明 python 脚本只打开一次 out.txt,然后继续从旧副本读取。如何让 python 脚本在每次迭代时重新读取文件?我在 SO 上看到了类似的问题,但它是关于与程序一起运行的 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 以便外部程序可以看到它的最新更改。当您写入文件时,数据会在本地进程中缓冲并以较大的 block 发送到系统。这样做是因为更新系统文件的成本相对较高。在您的情况下,您需要强制刷新数据以便 minisat 可以看到它。

    foo.write('\n'+output)
foo.flush()

关于Python从磁盘刷新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27829575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com