Проверьте состояние выхода последней команды в ipython - PullRequest
7 голосов
/ 20 июля 2011

Кто-нибудь знает, как проверить состояние последней выполненной команды (код выхода) в ipython?

Ответы [ 3 ]

15 голосов
/ 20 июля 2011

Он должен храниться как _exit_code после запуска команды (по крайней мере, в следующем выпуске v0.11).

7 голосов
/ 20 июля 2011

Я предполагаю, что вы говорите о запуске команд из IPython, используя ! escape:

In[1]: !echo hello
hello

In[2]:

Используя Google, я нашел документацию, и нигде не упоминается о состоянии завершения захвата команды. Используя dir(), я искал имя переменной, которая могла бы содержать эту информацию, и я ничего не нашел. Я пробовал синтаксис x = !ls и x получает список выходных строк из команды; там нет статуса выхода.

Короче говоря, я не думаю, что IPython даже собирает эту информацию. На этом этапе я хотел бы проверить исходный код IPython, чтобы попытаться выяснить что-нибудь еще.

Вы всегда можете просто запустить команду с помощью os.system() и получить из нее статус выхода.

In[1]: !launch_eva
launch_eva: could not open AT Field

In[2]: import os
In[3]: exit_status = os.system("launch_eva")
launch_eva: could not open AT Field

In[4]: exit_status
3

In[5]:

Таким образом, мы видим, что команда launch_eva возвращает состояние выхода 3, когда она не может открыть поле AT.

Похоже, это то, что IPython должен сохранять. Есть много маленьких скрытых переменных. Вы должны подать запрос на добавление функции по этому поводу.

ПРИМЕЧАНИЕ. Это было протестировано в IPython 0.10.1 в Ubuntu. В другом ответе «piotr» говорится, что код выхода будет записан в IPython 0.11, который скоро выйдет. Я клонировал исходный код из репозитория Git по адресу https://github.com/ipython/ipython.git и протестировал его с python ipython.py; как сказал Петр, статус выхода сохраняется в переменной с именем _exit_status.

0 голосов
/ 13 апреля 2018

Вы можете сохранить результат команды в переменной и проверить, присутствует ли переменная в функции locals () или нет. например1: -

var1="hello"
if 'var1' in locals():
print "status is false i.e 0"
else :
print "status is false i.e 1"

В этом случае переменная будет напечатана как hello, если вы не назначите var1 для какого-либо значения, оно перейдет в цикл else. example2: -

var1=subprocess.check_output('ps -aef | grep -i dmesg -wT | grep -v grep',shell=True)
if 'var1' in locals():
print "status is true i.e 0"
else :
print "status is false i.e 1"
...