gpt4 book ai didi

python - 子进程错误文件

转载 作者:太空狗 更新时间:2023-10-30 00:14:11 25 4
gpt4 key购买 nike

我正在使用 python 模块 subprocess 调用程序,并使用以下命令将可能的标准错误重定向到特定文件:

with open("std.err","w") as err:
subprocess.call(["exec"],stderr=err)

我希望只有在出现错误时才创建“std.err”文件,但如果没有错误则使用上面的命令代码将创建一个空文件。我如何让 python 仅在文件不为空时才创建文件?

我可以在执行后检查文件是否为空,以防删除它,但我一直在寻找一种“更干净”的方式。

最佳答案

您可以使用 Popen,检查标准错误:

from subprocess import Popen,PIPE

proc = Popen(["EXEC"], stderr=PIPE,stdout=PIPE,universal_newlines=True)

out, err = proc.communicate()
if err:
with open("std.err","w") as f:
f.write(err)

附带说明一下,如果您关心返回码,您应该使用 check_call,您可以将它与 NamedTemporaryFile 结合使用:

from tempfile import NamedTemporaryFile
from os import stat,remove
from shutil import move

try:
with NamedTemporaryFile(dir=".", delete=False) as err:
subprocess.check_call(["exec"], stderr=err)
except (subprocess.CalledProcessError,OSError) as e:
print(e)


if stat(err.name).st_size != 0:
move(err.name,"std.err")
else:
remove(err.name)

关于python - 子进程错误文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29810959/

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