【发布时间】:2014-11-25 16:39:53
【问题描述】:
我正在尝试通过 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' 和 'communicate()' 之类的技术来尝试获取输出和错误导致获取两者都“无”。可能是我做错了什么。
任何帮助将不胜感激,因为我觉得我在绕圈子。另外,如果这已经在某个地方解决了,我深表歉意,我确实尝试通过谷歌找到解决方案,并搜索 stackoverflow,但无法正确执行它们。
如果有人需要任何进一步的信息来提供帮助,我将非常乐意提供帮助。
谢谢。
【问题讨论】:
-
添加你尝试过的子流程代码和错误输出
-
您可以使用
with subprocess.Popen().stdout as output:,然后使用for line in output:,如this answer 中脚本末尾附近所示。