通过Python脚本从命令行处理输出

时间:2009-12-12 18:39:21

标签: python scripting process

我正在尝试使用Python 2.6的子进程模块来运行命令并获取其输出。该命令通常如下所示:

/usr/local/sbin/kamctl fifo profile_get_size myprofile | awk -F ':: ' '{print $2}'

在我的脚本中使用子进程模块使用这些参数执行该命令并从命令获取返回值的最佳方法是什么?我正在使用Python 2.6。

2 个答案:

答案 0 :(得分:4)

您想要输出,返回值(AKA状态代码)还是两者兼而有之?

如果管道在stdout和/或stderr上发出的数据量不是太大,那么获取“以上所有”非常简单:

import subprocess

s = """/usr/local/sbin/kamctl fifo profile_get_size myprofile | awk -F ':: ' '{print $2}'"""

p = subprocess.Popen(s, shell=True, stdout=subprocess.PIPE)

out, err = p.communicate()

print 'out: %r' % out
print 'err: %r' % err
print 'status: %r' % p.returncode

如果你必须处理潜在的大量输出,那么需要更多的代码 - 看起来你不应该有这个问题,从有问题的管道判断。

答案 1 :(得分:2)

f.e。 stdout你可以这样:

>>> import subprocess
>>> process = subprocess.Popen("echo 'test'", shell=True, stdout=subprocess.PIPE)
>>> process.wait()
0
>>> process.stdout.read()
'test\n'