Subprocess.check_output失败,退出状态为-15

问题描述 投票:0回答:1
subprocess.check_output('lspci | egrep  -i "virtio network" | wc -l', shell=True)

退出状态失败-15。可能出现这种情况的可能方案是什么?

CalledProcessError: Command 'lspci | egrep  -i "virtio network" | wc -l' returned non-zero exit status -15

我读到退出状态1,但代码-15背后的具体含义是什么。

python subprocess
1个回答
0
投票

你会在python 2中看到这个,如果子进程死了接收到SIGTERM(即15)。既然你已经使用了shell=True,这意味着包裹你的呼叫的/bin/sh进程被(接收信号)SIGTERM(并终止)杀死了。

在这种情况下,Python 3输出对于暗示原因可能会更有帮助:

subprocess.CalledProcessError: Command 'lspci | egrep  -i "virtio network" | wc -l' died with <Signals.SIGTERM: 15>.

看看你的台词:

subprocess.check_output('lspci | egrep  -i "virtio network" | wc -l', shell=True)

尝试这个可能有意义:

len([l for l
     in subprocess.check_output('lspci').lower().splitlines()
     if b"virtio network" in l])

它不是将调用包装在shell实例中并且分叉多个进程以获得具有特定字符串的行数,而是从lspci检索输出,将其转换为小写(以使匹配不区分大小写,如上面的-i)并在线上拆分输出边界。基于这些行的列表的列表理解得到我们所有行的结果列表限制为包含搜索的str(或者更确切地说bytes为py2 / 3友好)的那些行,并且len给了我们一个int有多少这样的行。

© www.soinside.com 2019 - 2024. All rights reserved.