【问题标题】:stop subprocess from initiating a process more than once阻止子进程多次启动一个进程
【发布时间】:2014-06-03 02:34:03
【问题描述】:

我有一个 Python 问题: 假设我正在使用 python 中的子进程库从终端运行程序。我需要循环调用子进程。 我怎样才能: 1)如果子进程已经启动,我会停止启动程序。或者... 2) 怎样才能知道程序是否还在运行,以免启动新的子进程?

【问题讨论】:

  • 您是否只关心 Python 脚本启动的子流程实例?您可以等待子流程完成后再进行下一次循环迭代吗?
  • 有时我需要在它停止之前抓住它。还有一些时候,我想等到它完成后再重复它。

标签: python subprocess


【解决方案1】:

您可以使用Process.poll 检查进程是否正在运行。如果进程当前正在运行,它将返回None。否则,它将返回子进程的退出代码。例如:

import subprocess
import time

p = None
while True:
   if p and p.poll() is None:
       print("Process is currently running. Do nothing.")
   else:  # No process running
       if p:  # We've run the process at least once already, so get the result.
           ret = p.returncode
           print("Last run returned {}".format(ret))
       p = subprocess.Popen(["some_command", "some arg"])
   time.sleep(3)  # Wait a few seconds before iterating again.

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多