gpt4 book ai didi

Python3子进程文件关闭

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:46 24 4
gpt4 key购买 nike

我正在学习 python3,我从他们的网站上有一些 python3.6.6 的基本代码

但我也在警告模式 -Wd 下运行 python,因此它会告诉我即使在工作程序中是否存在任何其他错误。

我正在尝试编写一些基本的 shell 脚本。

https://codecalamity.com/run-subprocess-run/

假设我运行

import subprocess
import os
print("Welcome to the obs program")

cmd=str(input("enter commands\n"))

print(cmd)

cmd=subprocess.run(cmd,
shell=True,
stdout=open(cmd+" stdout", 'w'),
stderr=open(cmd+" stderr",'w'),
bufsize=1
)

我收到错误消息,表示我没有关闭文件 =(

ResourceWarning: unclosed file <_io.TextIOWrapper name='ls -l stderr' mode='w' encoding='ANSI_X3.4-1968'>
bufsize=1

所以我尝试了

cmd.stdout.close()
cmd.stderr.close()

它仍然没有关闭文件=(

这不会扰乱我的程序,我只是想确保我正在关闭我的文件。

谢谢!

抱歉,我是堆栈溢出新手!

最佳答案

在这种情况下,不要将 open 的结果传递给不会关闭它的过程,因为您将丢失句柄,这是不好的做法。您无法确定 python 垃圾收集并关闭文件的时刻。

您的尝试不起作用,您正在尝试关闭其他对象(在使用 subprocess.PIPEsubprocess.redirect 进行重定向时,cmd.stdout 很方便。标准输出)。

只需使用上下文管理器并处理变量:

with open(cmd+" stdout", 'wb') as fout, open(cmd+" stderr",'wb') as ferr:
cmd=subprocess.run(cmd,
shell=True,
stdout=fout,
stderr=ferr,
bufsize=1
)

退出 with block 时,重定向的输出/错误文件将关闭(无需对其调用 close)

关于Python3子进程文件关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365366/

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