首页 > 解决方案 > python 使用超时等待外部程序完成

问题描述

在我运行我的 python 脚本之前,我需要检查外部程序是否正在运行并等待它完成。

我有几部分,但在将它们组合成一个有凝聚力的脚本时遇到了一些困难。

我可以使用以下内容来获取程序的 PID 和一个将在 10 秒内超时的 while 循环

from subprocess import check_output
import time

def get_pid(name):
    return check_output(["pidof",name])

print "%s" % get_pid("java")

timeout = time.time() + 10
test = 0
while True:
    if time.time() > timeout:
        print "exception goes here"
        break
test = test + 1
time.sleep(1)

如果程序没有运行 get_pid 会失败,我认为我需要在这种情况下捕获异常?这是我不确定要去哪里的地方。也许有更好的方法来解决这个问题?

===============

这是一个似乎可以正常工作的更新。

from subprocess import check_output, CalledProcessError
import time

def get_pid(name):
    try:
        process_status = check_output(["pidof",name])
    except CalledProcessError as e:
        process_status = None
    return process_status

timeout = time.time() + 10
program = "java"
while get_pid(program) != None:
    time.sleep(1)
    print "1 second loop"
    if time.time() > timeout:
        raise ValueError ('Timeout exceeded')
print "%s is not running" % program

标签: python

解决方案


您可以尝试捕获异常。因为当check_output返回非零异常实例时,CalledProcessError会引发可以处理的。像这样。

from subprocess import CalledProcessError
def get_pid(name):

    try:
        process_status = check_output(["pidof",name])
    except CalledProcessError as e:
        process_status = None # You can additionally get return code in the returncode attribute and any output in the output attribute.
    return process_status

希望它有效!


推荐阅读