pythonw.exe или python.exe?

Короче: pythonw.exe ничего не делает, python.exe ничего не принимает (какую мне использовать?)

test.py:

print "a"

CMD окно:

C:\path>pythonw.exe test.py
<BLANK LINE>
C:\path>

C:\path>python.exe test.py
  File "C:\path\test.py", line 7
    print "a"
            ^
SyntaxError: invalid syntax

C:\path>

Пожалуйста, скажите мне, что я делаю ужасно неправильно.

5 ответов

Решение

Если вы не хотите, чтобы окно терминала появлялось при запуске вашей программы, используйте pythonw.exe;
В противном случае используйте python.exe

Что касается синтаксической ошибки: print теперь функция в 3.x
Так что используйте вместо:

print("a")

Подводя итог и дополняем существующие ответы:

  • python.exe консольное (терминальное) приложение для запуска скриптов типа CLI

    • Если не запустить из существующего окна консоли, python.exe открывает новое окно консоли.
    • Стандартные потоки sys.stdin, sys.stdout а также sys.stderr подключены к окну консоли.
    • Выполнение является синхронным при запуске из cmd.exe или окно консоли PowerShell: см. eryksun комментарий eryksun ниже.

      • Если было создано новое окно консоли, оно остается открытым до тех пор, пока сценарий не завершится.
      • При вызове из существующего окна консоли приглашение блокируется до тех пор, пока сценарий не завершится.
  • pythonw.exe приложение с графическим интерфейсом для запуска сценариев GUI/no-UI-at-all

    • НЕТ окно консоли не открывается.
    • Исполнение асинхронное:
      • Когда скрипт вызывается из окна консоли, он просто запускается, и приглашение сразу возвращается, независимо от того, запущен скрипт или нет.
    • Стандартные потоки sys.stdin, sys.stdout а также sys.stderr НЕ доступны
      • Внимание: если вы не предпримете дополнительные шаги, это может привести к неожиданным побочным эффектам:
        • Необработанные исключения приводят к автоматическому прерыванию работы сценария.
        • В Python 2.x просто пытаюсь использовать print() может привести к тому, что это произойдет (в 3.x, print() просто не имеет никакого эффекта).
        • Чтобы предотвратить это из вашего сценария и узнать больше, посмотрите мой ответ.
        • Специально, вы можете использовать перенаправление вывода: Спасибо, @handle.
          pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
          (из PowerShell:
          cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt) для записи вывода stdout и stderr в файлы.
          Если вы уверены, что использование print() это единственная причина, по которой ваш скрипт молчит pythonw.exe, и вы не заинтересованы в выводе stdout, используйте команду @ handle из комментариев:
          pythonw.exe yourScript.pyw 1>NUL 2>&1
          Предостережение: эта техника перенаправления вывода не работает при вызове *.pyw сценарии напрямую (в отличие от передачи пути файла сценария к pythonw.exe). См. eryksun -й комментарий eryksun и его последующие действия ниже.

Вы можете контролировать, какой из исполняемых файлов запускает ваш скрипт по умолчанию - например, при открытии из Explorer - выбрав правильное расширение имени файла:

  • *.py файлы по умолчанию связаны (вызываются) с python.exe
  • *.pyw файлы по умолчанию связаны (вызываются) с pythonw.exe

Смотрите здесь: http://docs.python.org/using/windows.html

pythonw.exe "Это подавляет окно терминала при запуске."

Если вы собираетесь вызывать скрипт Python из какого-либо другого процесса (скажем, из командной строки), используйте pythonw.exe, В противном случае ваш пользователь будет постоянно видеть cmd окно запуска процесса python. Он по-прежнему будет запускать ваш скрипт точно так же, но он не будет влиять на пользовательский опыт.

Примером может быть отправка электронного письма; python.exe появится окно CLI, отправьте электронное письмо, затем закройте окно. Он будет выглядеть как быстрая вспышка, и его можно считать несколько раздражающим. pythonw.exe избегает этого, но все равно отправляет электронное письмо.

Я изо всех сил пытался заставить это работать некоторое время. После того, как вы измените расширение на.pyw, убедитесь, что вы открыли свойства файла и направили открытый путь к pythonw.exe.

По моему опыту, pythonw.exe быстрее по крайней мере с использованием pygame.

Другие вопросы по тегам