Tại saomã trả Tại sao subprocess.Popen khác cho các lệnh tương tự với bash
import subprocess
p = subprocess.Popen(["/bin/bash", "-c", "timeout -s KILL 1 sleep 5 2>/dev/null"])
p.wait()
print(p.returncode)
lợi nhuận
[stderr:] /bin/bash: line 1: 963663 Killed timeout -s KILL 1 sleep 5 2> /dev/null
[stdout:] 137
khi
import subprocess
p = subprocess.Popen(["/bin/bash", "-c", "timeout -s KILL 1 sleep 5"])
p.wait()
print(p.returncode)
lợi nhuận
[stdout:] -9
Nếu bạn thay đổi dấu gạch ngang thành dấu gạch ngang, bạn sẽ nhận được 137 trong cả hai trường hợp. Tôi biết rằng -9 là KILL mã và 137 là 128 + 9. Nhưng có vẻ kỳ lạ cho mã tương tự để có được mã trả lại khác nhau.
xảy ra trên Python 2.7.12 và python 3.4.3
Hình như Popen.wait()
không gọi Popen._handle_exitstatus
https://github.com/python/cpython/blob/3.4/Lib/subprocess.py#L1468 khi sử dụng /bin/bash
nhưng tôi không thể tìm ra lý do tại sao.
Có vẻ như 'timeout' là Linux cụ thể, nhân tiện. Tôi nhận được mã trả về 127 với cả hai phiên bản mã trên 2.7.10 và 3.6.0 trên OS X. – cdarke