使用Python的子进程模块,有没有办法在调用卡住时跳过执行?

时间:2014-05-08 22:32:51

标签: python subprocess

作为大型计划的一部分,我正在使用

subprocess.call('some external program', shell=True)

(这是一个旧的C程序,我只有编译版本坐在网络服务器上,所以我不能只抓取C源代码并用Python连接它)

暂时生成一些数据,我再次读入Python。 问题是通过子进程调用的外部程序有时会卡在某些输入文件上。 有没有办法跳过subprocess.call(),例如,如果shell在任意时间限制后没有响应?

E.g., 

# for data in directory:
    # do sth.
    subprocess.call('call prog.', shell=True) # skip if takes longer than 5 min
    # analyze data

1 个答案:

答案 0 :(得分:0)

从Python 3.3开始,您可以在几秒钟内设置timeout argument

try:
    return_code = subprocess.call('call prog.', shell=True, timeout=10)
except TimeoutExpired:
    # handle timeout exception here which gets throw after
    # 10 seconds in this example