如何通过subprocess.check_output()获取超时命令的输出?

时间:2019-06-06 11:21:39

标签: python python-3.x

我正在尝试使用python库子进程运行一些命令。我的某些命令可能会陷入循环并阻塞python脚本。因此,我使用带有超时参数的check_output()来限制命令的时间。当命令花费太多时间时,该函数将引发TimeoutExpired错误。我想做的就是获取该命令在被超时杀死之前能够执行的操作。

除了错误,我尝试了“ sp.TimeoutExpired为e:除外”。我在文档上读到,如果我执行e.output,它应该给我我想要的东西。 “如果check_output()引发此异常,则子进程的输出。否则,无。”但是我在输出中什么都没有。

这是我所做的:

import subprocess as sp
try:
        out = sp.check_output('ls', stderr=sp.STDOUT, universal_newlines=True, timeout=1)
except sp.TimeoutExpired as e:
        print ('output: '+ e.output)
else:
        return out

让我们说我正在使用的文件夹很大,所以1秒钟不足以存放所有文件。因此,将引发TimeoutExpired错误。但是,我想存储脚本至少能够得到的东西。有人有主意吗?

1 个答案:

答案 0 :(得分:0)

找到了一个解决方案,以防有人感兴趣将其张贴在这里。

var testRegex = /yolo .+ .+/gu;
let test = `yolo 2 abc
yolo 2 abc`;

test = test.split('\n');

for (let t=0; t < test.length; t++)
{
    console.log(test[t], testRegex.exec(test[t]));
    testRegex.lastIndex = 0;
}

在Python 3中,run方法允许获取输出。 使用示例中所示的参数,TimeoutExpired将在stdout中的超时之前返回输出。

我希望它可以帮助某人。