2

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

在我的具体情况下,我打电话给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
4

1 回答 1

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
于 2012-10-17T20:56:20.337 回答