Подпроцесс не завершится, если он создан сценарием WSGI - PullRequest
0 голосов
/ 29 октября 2019

У меня есть этот фрагмент кода из веб-приложения, и он может запускаться и завершаться нормально, если я выполню его из командной строки. Но если он выдан по запросу 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), но я не мог понять, почему это произойдет.

Есть ли какая-то разница для подпроцесса, если он разветвлен веб-приложением?

...