python中subprocess的getoutput()等效方法
我想在一个Python脚本里获取一些命令行指令的输出,比如 ls
或者 df
。我发现 commands.getoutput('ls')
这个方法已经不推荐使用了,而 subprocess.call('ls')
只会给我返回一个状态码。
我希望能有一个简单的解决办法。
3 个回答
12
要捕捉使用 subprocess.check_output()
产生的错误,你可以用 CalledProcessError
。如果你想把输出当作字符串来用,就需要把它从字节码解码成普通文本。
# \return String of the output, stripped from whitespace at right side; or None on failure.
def runls():
import subprocess
try:
byteOutput = subprocess.check_output(['ls', '-a'], timeout=2)
return byteOutput.decode('UTF-8').rstrip()
except subprocess.CalledProcessError as e:
print("Error in ls -a:\n", e.output)
return None
57
对于Python版本在2.7及以上的,可以使用 subprocess.check_output()
这个方法。
117
使用 subprocess.Popen:
import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
print(out)
需要注意的是,使用 communicate 方法会一直等到这个进程结束才会继续执行。如果你想在进程结束之前就获取输出,可以使用 process.stdout.readline()。想了解更多信息,可以查看 文档。