Запуск скрипта через подпроцесс. Открыть с возвращаемым значением
У меня есть простой скрипт, который имеет структуру:
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
,