为什么
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但我无法弄清楚原因.
我不确定是不是因为sys.stderr.write更快.