检查stderr的check_call命令并重新运行命令

时间:2012-12-28 21:04:50

标签: python python-2.7

我确信有更好的方法来编写下面的代码...下面是我当前代码遇到的问题,请提供您可能提供的任何输入

  1. 我想检查下面命令的stderr并根据错误消息重新运行它

  2. 错误消息看起来像“错误:无法删除您当前所在的分支”字母数字字符串“,我尝试匹配如下但遇到错误

    import subprocess    
    def main():
    change="205739"
    proc = subprocess.Popen(['git', 'branch', '-d', change], stderr=subprocess.PIPE)
    out, error = proc.communicate()
    if error.startswith("error: Cannot delete the branch"):
        subprocess.check_call(['git', 'branch', '-d', change])
    
    if __name__ == '__main__':
    main()
    

1 个答案:

答案 0 :(得分:2)

你真的想避免使用shell=True,而是将其拆分成一个列表,而你将不得不使用插值来启动。

要测试相等性,请使用==; =仅用于if语句中不允许的分配。

如果您想检查.Popen()输出,则需要使用stderr

import subprocess

def main():
    change="205739"
    proc = subprocess.Popen(['git', 'branch', '-d', change], stderr=subprocess.PIPE)
    out, error = proc.communicate()
    if error.startswith("error: Cannot delete the branch"):
        subprocess.check_call(['git', 'branch', '-d', change])