获取(在Python中)从Python执行CMD命令的文本输出

时间:2014-11-25 16:39:53

标签: python cmd window output

我正在尝试通过Python运行Bazaar版本控制。为此我一直在使用“os.system('')”(尽管我现在认为这不是通过命令提示符运行的推荐命令)。

对于一个部分,我想运行命令“BZR commit [file] -m'[text]'”。这将运行Bazaar并使用消息[text]对[file]进行更改。运行时,Bazaar会在命令提示符下打印几行文本,基本上表示是否成功。

使用“os.system('[message]')”(其中[message]是前面提到的命令)运行此命令,命令提示符成功执行命令并打印相关行。我希望在Python中找回这些内容以检查已完成的内容等。这就是我的问题所在。

我试过类似“result = os.system('[message]')”但这不起作用(它给出'result = 3',其中3绝对不是命令提示符中的输出)。

我尝试过搜索解决方案并遇到了很多关于“子流程”的建议(例如here)。然而,这些似乎不起作用(或者至少我没有让它们工作),并且使用诸如使用'Popen'和'communic()'等技术来尝试获取输出和错误导致获得两者都“没有”。可能是我做错了。

任何帮助都会非常感激,因为我觉得我已经绕圈子了。此外,如果这已经在某处解决了道歉,我确实尝试通过谷歌找到解决方案,并搜索stackoverflow,但无法正确执行它们。

如果有人需要任何进一步的信息,以帮助我更乐意提供帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

正如Cyber​​所提到的,subprocess.check_output是一种非常简单的方法:

import subprocess
file = "foo.txt"
text = "'comment'"
output = subprocess.check_output(["BZR", "commit", file, "-m", text])
print(output)

免责声明:此代码仅适用于Python 2.7 +

答案 1 :(得分:0)

我为我的python程序做了类似的事情,使用git来获取版本信息。 希望它也适用于您的版本控制。 工作示例:

from subprocess import Popen, PIPE

p1 = Popen(['git', 'log' , '-n', '1'], stdout=PIPE, shell=False)
msgout = p1.communicate()[0]  
#msgerr = p1.communicate()[1]  # this captures stderr info but you have to rerun p1
print msgout