Запуск скрипта через подпроцесс. Открыть с возвращаемым значением

У меня есть простой скрипт, который имеет структуру:

if __name__ =='main':
    #do some logic
    #print to console the result

Теперь я запустил скрипт через код, используя subprocess.Popen() метод как это:

p = subprocess.Popen(
  ["python", path_of_script_to_run] + arguments_list, 
  stdout=subprocess.PIPE,
  stderr=subprocess.PIPE)

У меня вопрос, как я могу вернуть значение из запущенного сценария в вызывающий сценарий, используя возвращаемое значение или другой метод.

Я не могу использовать возврат в контексте if __name__ =='main':Значит ли это, что я не могу передать возвращаемое значение, которое будет назначено в вызывающем скрипте p переменная?
Я также хочу попытаться избежать анализа отпечатков скрипта, запущенного на консоль..

2 ответа

Использование communicate() чтобы получить вывод вашего скрипта. А также returncode чтобы получить код выхода.

p = subprocess.Popen(
  ["python", path_of_script_to_run] + arguments_list, 
  stdout=subprocess.PIPE,
  stderr=subprocess.PIPE)

(stdoutdata, stderrdata) = p.communicate()
exit_code = p.returncode

Чтобы ваш другой скрипт возвращал код выхода, вы должны использовать sys.exit(code),

import sys
if __name__ =='main':
    try:
        # do stuff
        sys.exit(0)
    except Exception as err:
        print(err)
        sys.exit(1)

Вы можете захватить вывод в вызывающем скрипте, используя subprocess.check_output():

from subprocess import check_output
result = check_output(args).decode()

Чтобы также зафиксировать стандартную ошибку в результате, используйте stderr=subprocess.STDOUT,

Другие вопросы по тегам