2016-01-11 2 views
-1

hello Я пытаюсь вернуть результат (который я знаю 1) из внешнего скрипта python, вызываемого из моего другого скрипта. когда echo $? из командной строки я получаю 1, но когда я пытаюсь вызвать echo $? из python, чтобы получить результат из скрипта python, я получаю 0 в скрипте. Вот мой код:

os.system(pythonPath+"serialWait.py "+dev+" "+brate+" login") //this 
os.system(pythonPath+"serialCommand.py "+dev+" "+brate+" reset") //this works  
value = subprocess.call('echo $?', shell=True) 
>//here is where my issue lies I am trying to call the exit code from the previous python script but only get the true value from terminal 
+2

Почему вы используете Python, чтобы заставить оболочку запускать другой скрипт Python? Можете ли вы не импортировать другие модули и просто запускать их из одного сценария? –

+1

У вас есть 3 отдельных снаряда. Не используйте 'os.system()' для чего-либо когда-либо и получайте возвращаемые значения из скриптов, используя механизмы, уже доступные в модуле подпроцесса ... – geoffspear

+0

@ cricket_007 Я новичок в python, но я верю, что я потому что сценарий python - это очень конкретный 1 раз подряд, используемый в других сценариях (т. е. много автоматизированных задач в bash), если у вас есть какие-либо предложения, хотя я всегда готов узнать – TheHidden

ответ

4

Это не представляется возможным: $? является переменной, которая существует только на время одной оболочки. Каждый раз, когда вы вызываете os.system(), это создает новую оболочку: старая уже вышла, поэтому переменные, внутренние для этой оболочки, такие как $?, больше не существуют.

Используйте subprocess модуль вместо:

p1 = subprocess.Popen(['serialWait.py', dev, brate, 'login']) 
p1.wait() 
if p1.returncode != 0: 
    print 'Process failed' 

Если все, что вам нужно сделать, это выбросить исключение для любого ненулевого результата, используйте subprocess.check_call() для этой цели.

+0

круто большое спасибо, просто попробовав это сейчас. im не делает плохой день 2 на python ... – TheHidden