子进程中的python getoutput()等价物

2022-01-18 00:00:00 python shell subprocess command

问题描述

我想从 python 脚本中的 lsdf 等一些 shell 命令获取输出.我看到 commands.getoutput('ls') 已被弃用,但 subprocess.call('ls') 只会让我得到返回码.

I want to get the output from some shell commands like ls or df in a python script. I see that commands.getoutput('ls') is deprecated but subprocess.call('ls') will only get me the return code.

我希望有一些简单的解决方案.

I'll hope there is some simple solution.


解决方案

使用subprocess.Popen:

import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
print(out)

请注意,通信会阻塞,直到进程终止.如果您需要在输出终止之前输出,您可以使用 process.stdout.readline().有关详细信息,请参阅 文档.

Note that communicate blocks until the process terminates. You could use process.stdout.readline() if you need the output before it terminates. For more information see the documentation.

相关文章