当前位置: 首页 > 面试题库 >

使用Python子进程通讯方法时如何获取退出代码?

尉迟轶
2023-03-14
问题内容

使用Python的subprocess模块和communicate()方法时,如何检索退出代码?

相关代码:

import subprocess as sp
data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0]

我应该以其他方式这样做吗?


问题答案:

Popen.communicate完成后将设置returncode属性(*)。这是相关的文档部分:

Popen.returncode 
  The child return code, set by poll() and wait() (and indirectly by communicate()). 
  A None value indicates that the process hasn’t terminated yet.

  A negative value -N indicates that the child was terminated by signal N (Unix only).

所以您可以做(我没有测试过,但是应该可以):

import subprocess as sp
child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
streamdata = child.communicate()[0]
rc = child.returncode

(*)发生这种情况的原因是它的实现方式:设置线程以读取子流后,它仅调用wait



 类似资料:
  • 问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味

  • 问题内容: 在Windows上的Python 3.4下,我需要使用Python 3.4中引入的asyncio框架流式传输子进程写入stdout / stderr的数据,即在发生时接收其输出。之后,我还必须确定程序的退出代码。我怎样才能做到这一点? 问题答案: 到目前为止,我想出的解决方案使用SubprocessProtocol来接收子进程的输出,并使用关联的传输来获取该进程的退出代码。我不知道这是

  • 问题内容: 我目前正在使用 我对Python相当陌生,但是它“感觉”到应该有一些api可以让我做类似的事情: 我这样做是为了在知道cmd已经退出的情况下可以执行某些操作(例如,对当前正在运行的外部进程数进行计数) 我以为我可以将子流程包装在将线程与方法结合在一起的类中,但是由于我还没有在Python中完成线程,而且对于API来说这似乎很常见,我想我会尝试先找到一个。 提前致谢 :) 问题答案: 您

  • 问题内容: 假设我有一个进程,它恰好产生了一个子进程。现在,当父进程出于某种原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死亡。如何正确地做到这一点? 问题答案: 子进程可以通过在syscall中指定选项来要求父进程去世时内核发出(或其他信号),如下所示: 有关详细信息,请参见。 编辑:这是仅Linux

  • 问题内容: 我正在尝试为命令行程序(svnadmin verify)编写包装脚本,该脚本将显示该操作的良好进度指示器。这要求我一看到包装程序的输出,就能够看到它的每一行。 我认为我只是使用, 来执行程序,然后读取其中的每一行并相应地对其进行操作。但是,当我运行以下代码时,输​​出似乎被缓冲在某处,导致它出现在两个块中,第1到332行,然后是333到439行(输出的最后一行) 在稍微了解一下子流程的

  • 问题内容: 我想使用模块来完成此操作。 当我这样做时,例如: 我启动一个父进程,然后让父进程产生一个子进程, 然后我希望父进程退出自身,但子进程继续工作。 请允许我写一个 错误 代码来解释一下自己: 那么,我如何启动一个在父进程完成时不会被杀死的进程? 20140714 大家好 我的朋友刚刚告诉我一个解决方案… 我只是想… 无论如何,只要让您看到: 这确实有效!! 问题答案: 一个技巧:调用以退出