2016-06-22 2 views
-1

У меня есть простой скрипт, который, имеющий структуру:Запуск сценария с помощью subprocess.Popen с возвращаемым значением

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?
Я также хочу, чтобы попытаться избежать разбора оттиски сценария запуска на консоли ..

+0

Да его рабочая – JavaSa

+0

список + список в Python список сцепляются – JavaSa

+0

Вы можете использовать 'exit' установить код возврата. Предположим, например, что вы хотите вернуть 2, просто выполните «exit (2)». – tdelaney

ответ

0

Вы можете перехватывать вывод в сценарии вызова с использованием subprocess.check_output():

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

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

+0

но как передать код возврата из контекста выполняющегося скрипта, пытаясь записать return [something], не может работать, поскольку вы получаете синтаксическую ошибку - «возвратите» из стороны функции – JavaSa

+0

@JavaSa просто «распечатайте» его? –

+0

Это именно то, чего я хотел избежать, печатает и разбирает отпечатки, более слабые, что возвращает значение – JavaSa

0

Используйте 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) 
+0

, но как передать код возврата из контекста исполняемого скрипта, пытаясь записать return [something], не может работать так, как вы get syntax error- 'return' out of function – JavaSa

+1

Используйте ['sys.exit (code)'] (https://docs.python.org/3/library/sys.html#sys.exit) в своем скрипте – Cyrbil

Смежные вопросы