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.