У меня есть этот фрагмент кода из веб-приложения, и он может запускаться и завершаться нормально, если я выполню его из командной строки. Но если он выдан по запросу http, подпроцесс не завершится.
import subprocess
def test_build():
msg = 'msg'
make_code = '/opt/arduino/arduino-builder -compile -and-many-other-options -verbose /tmp/arduino-sketch-7c17cb3749d67dadaded5c7edc6ca63b/main.ino'
try:
ps = subprocess.Popen(make_code,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
msg = ps.stderr.read()
exc_code = ps.wait()
# print(msg) # for debug only
# print(exc_code)
except Exception as e:
print("error with build", str(e) + msg)
test_build()
Это только происходит при добавлении определенных кодов к main.ino
.
Проблема исчезла после того, как я изменил subprocess.Popen(make_code,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
на subprocess.Popen(make_code,stderr=subprocess.PIPE,shell=True)
, но я не мог понять, почему это произойдет.
Есть ли какая-то разница для подпроцесса, если он разветвлен веб-приложением?