我有一个使用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
答案 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