Pythonw.exe还是Python.exe?
Pythonw.exe还是Python.exe?
长话短说:pythonw.exe什么都不做,python.exe不接受任何输入(我应该使用哪一个?)
test.py:
print "a"
CMD窗口:
C:\path>pythonw.exe test.py C:\path> C:\path>python.exe test.py File "C:\path\test.py", line 7 print "a" ^ SyntaxError: invalid syntax C:\path>
请告诉我我做错了什么。
admin 更改状态以发布 2023年5月25日
如果您不希望在运行程序时弹出终端窗口,请使用 pythonw.exe
;
否则,请使用 python.exe
关于语法错误: print
在3.x版本中已成为一个函数。因此,请改用以下语法:
print("a")
总结和补充现有答案:
-
python.exe
是一个用于启动基于CLI类型脚本(控制台应用程序)的控制台(终端)应用程序。-
除非从现有控制台窗口运行,否则
python.exe
会打开一个新的控制台窗口。 -
标准流
sys.stdin
、sys.stdout
和sys.stderr
与控制台窗口相连接。 -
如果从
cmd.exe
或 PowerShell 控制台窗口启动,执行是同步的:请参见下面的 eryksun 的第一个评论。- 如果创建了一个新的控制台窗口,直到脚本终止,它都会保持打开状态。
- 如果从现有的控制台窗口调用,提示符会被阻塞直到脚本终止。
-
-
pythonw.exe
是一个 GUI 应用程序 用于启动GUI/没有UI的脚本。-
不会打开控制台窗口。
-
执行是异步的:
- 如果从控制台窗口调用,脚本只是启动了,并且无论脚本是否仍在运行,提示符都会立即返回。
-
标准流
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 的第二个评论及其后续评论。
-
您可以通过选择正确的文件名扩展名来 控制默认运行哪个可执行文件(例如,从资源管理器打开时):
*.py
文件默认与python.exe
关联(调用)*.pyw
文件默认与pythonw.exe
关联(调用)