小编Leh*_*ych的帖子

为什么subprocess.Popen返回码与bash的类似命令不同

为什么

import subprocess

p = subprocess.Popen(["/bin/bash", "-c", "timeout -s KILL 1 sleep 5 2>/dev/null"])
p.wait()
print(p.returncode)
Run Code Online (Sandbox Code Playgroud)

回报

[stderr:] /bin/bash: line 1: 963663 Killed                  timeout -s KILL 1 sleep 5 2> /dev/null
[stdout:] 137
Run Code Online (Sandbox Code Playgroud)

什么时候

import subprocess

p = subprocess.Popen(["/bin/bash", "-c", "timeout -s KILL 1 sleep 5"])
p.wait()
print(p.returncode)
Run Code Online (Sandbox Code Playgroud)

回报

[stdout:] -9
Run Code Online (Sandbox Code Playgroud)

如果你将bash改为破折号,那么在这两种情况下你都会得到137.我知道-9是KILL代码而137是128 + 9.但类似的代码获得不同的返回码似乎很奇怪.

发生在Python 2.7.12和python 3.4.3上

看起来在使用时Popen.wait()不会调用Popen._handle_exitstatus https://github.com/python/cpython/blob/3.4/Lib/subprocess.py#L1468,/bin/bash但我无法弄清楚原因.

python bash subprocess dash-shell

6
推荐指数
1
解决办法
310
查看次数

1
推荐指数
1
解决办法
69
查看次数

标签 统计

python ×2

bash ×1

dash-shell ×1

logging ×1

subprocess ×1