Как определить, запускается ли скрипт Python в терминале или через графический интерфейс? - PullRequest
10 голосов
/ 29 сентября 2010

Я работаю в Linux и мне интересно, как заставить python сообщать, запускается ли он напрямую из терминала или через графический интерфейс (например, alt-F2), где вывод нужно будет отправлять в окно, а не в stdout, который появится в терминале.

В bash это сделано:

if [ -t 0 ] ; then  
    echo "I'm in a terminal"
else
    zenity --info --title "Hello" --text "I'm being run without a terminal"
fi

Как это можно сделать в python? Другими словами, эквивалент [-t 0])?

Ответы [ 4 ]

8 голосов
/ 29 сентября 2010
$ echo ciao | python -c 'import sys; print sys.stdin.isatty()'
False

Конечно, ваша IDE на основе графического интерфейса может выбрать "обмануть" вас, открыв вместо этого псевдотерминал (вы можете сделать это сами с другими программами с pexpect , и что такое соус для гуся ...! -), в этом случае isatty или любой другой подход внутри Python не может определить разницу. Но тот же трюк также «обманул бы» вашу примерную bash программу (точно таким же образом), так что, я думаю, вы об этом знаете. ОТО, это сделает невозможным для программы принимать ввод через обычный Unix-канал!

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

2 голосов
/ 27 февраля 2015

Я искал SE для ответа на этот вопрос, но везде указывал на использование sys.stdout.isatty() или os.isatty(sys.stdout.fileno()).Ни один из этих вариантов не попал в мои тестовые графические интерфейсы.

Тестирование стандартного ввода было единственным, что сработало для меня:

sys.stdin.isatty()
0 голосов
/ 04 марта 2016

У меня была такая же проблема, и я сделал следующее:

import sys

mode = 1
try:
    if sys.stdin.isatty():
        mode = 0
except AttributeError:  # stdin is NoneType if not in terminal mode
    pass

if mode == 0:
    # code if terminal mode ...
else:
    # code if gui mode ...
0 голосов
/ 29 сентября 2010

Есть несколько примеров этого на PLEAC , что соответствует третьему случаю: запуск в интерактивной подсказке Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...