क्योंक्यों subprocess.Popen returncode बैश के साथ इसी तरह आदेश के लिए अलग है
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
यदि आप डैश में बैश बदलते हैं, तो आपको दोनों मामलों में 137 मिलेंगे। मुझे पता है कि -9 किल कोड है और 137 128 + 9 है। लेकिन अलग-अलग रिटर्नकोड प्राप्त करने के लिए समान कोड के लिए अजीब लगता है।
अजगर 2.7.12 और अजगर 3.4.3
जब /bin/bash
का उपयोग कर, लेकिन मैं बाहर क्यों समझ नहीं सकता Popen.wait()
की तरह लग रहा Popen._handle_exitstatus
https://github.com/python/cpython/blob/3.4/Lib/subprocess.py#L1468 फोन नहीं करता है पर होता है।
ऐसा लगता है कि 'टाइमआउट' लिनक्स विशिष्ट है, वैसे भी। मुझे ओएस एक्स पर 2.7.10 और 3.6.0 दोनों कोड संस्करणों के साथ 127 का रिटर्न कोड मिलता है। – cdarke