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>
请告诉我我在做错什么。
-
如果你不希望在运行程序时弹出终端窗口,请使用
pythonw.exe
;
否则,使用python.exe
关于语法错误:
print
现在是3.x中的函数,请
改用:print("a")
-
总结和补充现有的答案:
-
python.exe是用于启动CLI类型脚本的控制台(终端)应用程序。
-
除非从现有控制台窗口运行,否则python.exe 将打开一个新的控制台窗口。
- 标准流 sys.stdin,sys.stdout并且sys.stderr被连接到控制台窗口。
- 从或PowerShell控制台窗口启动时,执行是同步的cmd.exe:请参阅下面的eryksun的第一条评论。
- 如果创建了新的控制台窗口,它将保持打开状态,直到脚本终止。
- 从现有控制台窗口中调用时,提示被阻止,直到脚本终止。
-
pythonw.exe是一个用于启动GUI /无UI脚本的GUI应用。
-
没有打开控制台窗口。
- 执行是异步的:
- 从控制台窗口中调用时,无论脚本是否仍在运行,脚本只会启动,并且提示会立即返回。
- 标准流 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,而你不是在标准输出输出,使用从注释兴趣@拉手的命令:
pythonw.exe yourScript.pyw 1>NUL 2>&1
买者:这个输出重定向技术确实不调用工作时*.pyw脚本直接(而不是将脚本文件路径传递到pythonw.exe)。请参阅下面的eryksun的第二条评论及其后续意见。
通过选择正确的文件扩展名,你可以控制默认情况下哪个可执行文件运行脚本(例如从资源管理器打开时): -
*.py
默认情况下,文件与以下文件关联(调用) python.exe *.pyw
默认情况下,文件与以下文件关联(调用) pythonw.exe
-