gpt4 book ai didi

python - 使用 subprocess.Popen() 后关闭 process.stdout

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

假设使用 subprocess.Popen() 方法运行基本的 Shell 命令 - 'ls -l',它给出了 CWD 中的文件列表。您的代码将像这样。

from subprocess import Popen,PIPE
p=Popen(['ls','-l'],stdout=PIPE)
print p.communicate()[0]
p.stdout.close()

而不是多行,你决定把它放在一行中并结束

print Popen(['ls','-l'],stdout=PIPE).communicate()[0]

我看不到 p.stdout.close() 放在哪里。有什么办法可以关闭这个子进程的标准输出吗?我正在使用 Python 2.6。我知道 Python 2.7 中的 check_output() 但我必须坚持使用 2.6。如果我一直打开输出 PIPE 流而不关闭它们,是否会出现任何潜在的安全或性能问题?

最佳答案

也许您可以使用 with 语句来自动关闭并使用 oneliner 编写代码。但在此之前,可以做一些基础工作。查看下面的代码

from subprocess import Popen

class MyPopen(Popen):

def __enter__(self):
return self

def __exit__(self, type, value, traceback):
if self.stdout:
self.stdout.close()
if self.stderr:
self.stderr.close()
if self.stdin:
self.stdin.close()
# Wait for the process to terminate, to avoid zombies.
self.wait()

if __name__ == '__main__':
with MyPopen(['ls','-l'],stdout=PIPE) as p:
print(p.communicate()[0])

关于python - 使用 subprocess.Popen() 后关闭 process.stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170113/

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