gpt4 book ai didi

python - 将输出从子进程传输到文件,然后读回

转载 作者:行者123 更新时间:2023-12-01 06:02:23 27 4
gpt4 key购买 nike

我有一个 python 脚本,它运行一个子进程来获取一些数据,然后对其进行处理。我想要实现的是将数据写入文件,然后使用文件中的数据进行处理(原因是子进程很慢,但可以根据日期、时间和参数进行更改我用过,需要经常运行脚本)

我尝试了各种方法,包括以 w+ 打开文件并尝试在写入完成后查找开头,但似乎没有任何效果 - 文件已写入,但是当我尝试从中读回(使用 file.readline()),我得到 EOF。

这就是我本质上想要实现的目标:

      myFile = open(fileName, "w")
p = subprocess.Popen(args, stdout=myFile)
myFile.flush() # force the file to disk
os.fsync(myFile) # ..
myFile.close()

myFile = open(fileName, "r")
while myFile.readline():
pass # do stuff
myFile.close()

但是即使文件被正确写入(脚本运行后,我可以看到文件的内容),readline也永远不会返回有效的行。就像我说的,我也尝试使用相同的文件对象,并对其执行 seek(0) ,但没有成功。这只在以 r+ 打开文件时有效,当文件不存在时会失败。

如有任何帮助,我们将不胜感激。另外,如果有更干净的方法来做到这一点,我对此持开放态度:)

PS:我意识到我可以Popenstdout到管道,从管道读取数据,然后逐行将数据写入文件,但我试图将数据文件的创建与读取分开。

最佳答案

在您尝试读取文件之前,几乎可以肯定子进程尚未完成。事实上,在您尝试从文件中读取数据之前,子进程可能根本没有写入任何内容。为了真正的分离,您必须让子进程写入临时文件,然后替换您从中读取的文件,这样您要么读取以前的版本,要么读取新版本,但永远不会从临时文件中看到部分写入的文件。新版本。

您可以通过多种方式做到这一点;最简单的方法是更改​​子流程,但我不知道这是否适合您。或者,您可以将其包装在您自己的单独脚本中来管理文件。您可能也不想在分析输出文件的脚本中调用子进程;你需要一个 cronjob 或其他东西来定期重新生成。

关于python - 将输出从子进程传输到文件,然后读回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667498/

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