子进程未捕获标准输出

时间:2020-06-28 15:15:39

标签: python subprocess popen

从现在开始我一直试图找出为什么我的subprocess.Popen不能捕获标准输出。可能与子进程输出文件有关。当我运行一个没有输出文件的子进程时,我发现了这一点,并且stdout(您将在终端上看到)已经到位。您能帮我如何在带有输出文件的情况下捕获它吗,所以我不想从文件中捕获输出,而仅捕获终端输出,因此运行输出。任何帮助都非常感激。

     command = "cnvkit.py call %s -o %s" % (file, output)
     process_call = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=sfs.path('cnv_app/call_CNS/'), universal_newlines=True)
stdout, stderr = process_call.communicate()
     if process_call.returncode and stderr:
          output_call = stdout
          output_err_call = stderr
     else:
          output_call = stdout 
          process_call.poll()
          response = {'output_call': output_call, 'output_err_call': output_err_call}

1 个答案:

答案 0 :(得分:0)

我的子进程正在返回一条警告,该警告显然发给了stderr,并且由于我的process_call.returncode将返回0,对于if语句而言,它为False,因此仅捕获了stdout,这是空的,这就是为什么我没有得到输出。我有点失望,当出现警告时,stdout全部交给stderr。是的,您是对的,您需要一个水晶球来回答这个问题,但是嘿,您帮助我解决了我的问题:)