python使用超时等待外部程序完成

时间:2019-03-11 23:08:55

标签: python

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

我有几篇文章,但是在将所有内容整合成一个有凝聚力的脚本时遇到了一些困难。

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

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

1 个答案:

答案 0 :(得分:0)

异常处理可以在引发异常的地方进行。因此,如果check_output抛出异常,则可以按以下方式处理

def get_pid(name):
    pid_ = None 
    try:
       pid_ = check_output(["pidof",name])
    except:
       pass
    return pid_
#logic to wait for pid_ to finish if found