将os.system的输出打印到屏幕并根据它执行操作

时间:2012-10-17 20:45:40

标签: python io

我有一个使用os.system运行shell命令的Python脚本。这些命令的输出回显到屏幕上;我喜欢这个,需要保留它。我还希望我的脚本能够根据系统调用的输出内容采取行动。我怎么能这样做?

在我的具体案例中,我正在呼叫os.system("svn update")。我需要输出到屏幕(例如,如果发生冲突),用户需要能够与svn 进行交互。我希望能够让脚本根据输出执行操作 - 例如,如果它看到构建脚本已更新,则触发构建。

我不想自己处理I / O(看起来似乎不必要的复杂)而且我宁愿不将输出发送到我必须稍后清理的临时文件(尽管我必须这样做) 。

编辑:

这是我的测试脚本:

#!/usr/bin/python -t

import subprocess

output = subprocess.check_output(["echo","one"])
print "python:", output

output = subprocess.check_output(["echo", "two"], shell=True)
print "python:", output

output = subprocess.check_output("echo three", shell=True)
print "python:", output

这是它的输出:

$ ./pytest 
python: one

python: 

python: three

(在代码块没有显示的末尾有一个额外的空白行。)我希望更像是:

$ ./pytest 
one
python: one
two
python: 
three
python: three

1 个答案:

答案 0 :(得分:2)

要运行流程,我会调查subprocess.check_output。在这种情况下,例如:

output = subprocess.check_output(['svn','update'])
print output

这仅适用于python2.7或更新版本。如果你想要一个适用于旧版python的版本:

p = subprocess.Popen(['svn','update'],stdout=subprocess.PIPE)
output,stderr = p.communicate()
print output