なぜ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)
戻り
[stderr:] /bin/bash: line 1: 963663 Killed timeout -s KILL 1 sleep 5 2> /dev/null
[stdout:] 137
import subprocess
p = subprocess.Popen(["/bin/bash", "-c", "timeout -s KILL 1 sleep 5"])
p.wait()
print(p.returncode)
戻り
[stdout:] -9
と同様のコマンドについて異なる理由
bashをダッシュに変更すると、どちらの場合も137になります。私は-9がKILLコードで137が128 + 9であることを知っています。しかし、同様のコードが異なる戻りコードを取得するのは変です。
は/bin/bash
を使用しているときPopen.wait()
がPopen._handle_exitstatus
https://github.com/python/cpython/blob/3.4/Lib/subprocess.py#L1468を呼び出すことはありませんが、私は理由を理解できなかったように見えるのPython 2.7.12とPythonに3.4.3
を発生します。
「タイムアウト」のように見えるのは、Linux固有のものです。 OS Xの2.7.10と3.6.0の両方のコードバージョンで127のリターンコードを取得します。 – cdarke