【问题标题】:I want to get both stdout and stderr from subprocess我想从子进程中获取 stdout 和 stderr
【发布时间】:2013-08-26 15:00:09
【问题描述】:

我只想做这样的事情:

>>bar, err_value = subprocess.check_output("cat foo.txt", shell=True)
>>print bar
>>Hello, world.
>>print err_value
>>0

但我似乎做不到。我可以获取标准输出、错误代码(通过.call)或者两者都可以,但需要使用某种管道。我在这里想念什么?关于这个(对我来说)明显的功能的文档非常稀少。对不起,如果这是一个简单的问题。

【问题讨论】:

    标签: python subprocess stdout


    【解决方案1】:

    我认为您想要 stdout、sterr 和返回码?在这种情况下,您可以这样做:

    import subprocess
    PIPE = subprocess.PIPE
    proc = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
    output, err = proc.communicate()
    errcode = proc.returncode
    

    【讨论】:

      【解决方案2】:

      subprocess.check_output 返回一个值(输出字符串),并且不返回退出状态。使用以下形式:

      import subprocess
      try:
          out = subprocess.check_output('cat foo.txt', shell=True)
          print out
      except subprocess.CalledProcessError, e:
          print e
      

      【讨论】:

        【解决方案3】:

        我最终选择了这个。感谢您的帮助!

        def subprocess_output_and_error_code(cmd, shell=True):
            import subprocess
            PIPE=subprocess.PIPE
            STDOUT=subprocess.STDOUT
            proc = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, shell=shell)
            stdout, stderr = proc.communicate()
            err_code = proc.returncode
            return stdout, int(err_code)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-23
          • 1970-01-01
          • 2012-03-16
          • 2023-04-06
          • 1970-01-01
          • 2011-04-22
          • 2015-08-18
          • 2011-07-07
          相关资源
          最近更新 更多