【问题标题】:python subprocess become idle after a while一段时间后python子进程变得空闲
【发布时间】:2019-02-18 20:50:04
【问题描述】:

我有两个脚本,一个是连续读取串口,另一个是后台运行串口读取脚本。下面给出的脚本是我用来作为子进程运行的。

subprocess.Popen("echo " + user_password + " | sudo -S " + filePath  shell=True, stdout=subprocess.PIPE)

如果我手动运行串口读取脚本,它不会空闲,它会连续运行。但是如果我使用上面的脚本作为子进程运行,串口读取脚本会在几分钟后空闲。我怎样才能阻止这个空闲问题?

【问题讨论】:

  • 很好奇,但如果您之后闲置 pyhton 脚本,它会停止吗?类似 while(true); time.sleep(1)
  • 脚本没有停止,它显示为在后台运行,但脚本没有响应
  • 您可以直接调用sudo,如Popen(["sudo", "-S", filePath], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 并输入密码,而不是依赖shell。它可以简化问题。还有,你用的是什么IPC,communcate()或者proc.stdout
  • 这取决于你对我上一个问题的回答。
  • 您是使用Popen 的结果到另一个变量,还是您发布的整行代码?如果是后者,您应该取出 , stdout=subprocess.PIPE,因为这意味着 Python 代码正在并且应该正在读取和处理命令的标准输出。如果不是,那么很可能是与操作系统相关的问题。

标签: python python-3.x python-2.7 subprocess


【解决方案1】:

您定义了stdout=subprocess.PIPE,它允许您通过将命令的输出保存到缓冲存储器来读取它们。但是,如果您不使用/读取它,则该内存会在一段时间后变满,并且子进程将挂起您使用它的工具。您可以通过传递stdout=subprocess.DEVNULL 来避免该问题,或者不使用stdout 指定任何内容。

【讨论】:

    【解决方案2】:

    我认为,如果你使用多进程而不是子进程,你不会遇到空闲问题

    http://answerexpress.blogspot.com/2018/09/python-subprocess-become-idle-after_15.html

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多