gpt4 book ai didi

python - 将标准输出从 subprocess.Popen 保存到文件,并将更多内容写入文件

转载 作者:IT老高 更新时间:2023-10-28 20:53:49 25 4
gpt4 key购买 nike

我正在编写一个 python 脚本,它使用 subprocess.Popen 来执行两个程序(来自已编译的 C 代码),每个程序都会产生标准输出。该脚本获取该输出并将其保存到文件中。因为输出有时大到足以压倒 subprocess.PIPE,导致脚本挂起,所以我将 stdout 直接发送到日志文件。我想让我的脚本在文件的开头和结尾以及两个 subprocess.Popen 调用之间写一些东西。但是,当我查看日志文件时,我从脚本写入日志文件的所有内容都放在文件的顶部,然后是所有可执行的标准输出。如何将添加的文本交错到文件中?

def run(cmd, logfile):
p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=logfile)
return p

def runTest(path, flags, name):
log = open(name, "w")
print >> log, "Calling executable A"
a_ret = run(path + "executable_a_name" + flags, log)
print >> log, "Calling executable B"
b_ret = run(path + "executable_b_name" + flags, log)
print >> log, "More stuff"
log.close()

日志文件有:调用可执行文件 A调用可执行文件 B更多东西[...来自两个可执行文件的标准输出...]

例如,在调用 Popen 之后,有没有办法可以将 A 的标准输出刷新到日志中?还有一件可能相关的事情:可执行文件 A 开始,然后在 B 上挂起,在 B 打印内容并完成之后,A 然后打印更多内容并完成。

我在 RHE Linux 上使用 Python 2.4。

最佳答案

您可以在每个 Popen 对象上调用 .wait() 以确保它已完成,然后调用 log.flush()。也许是这样的:

def run(cmd, logfile):
p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=logfile)
ret_code = p.wait()
logfile.flush()
return ret_code

如果您需要与外部函数中的 Popen 对象进行交互,您可以将 .wait() 调用移到那里。

关于python - 将标准输出从 subprocess.Popen 保存到文件,并将更多内容写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190825/

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