问题: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>
请告诉我我在做错什么。
回答 0
回答 1
总结和补充现有的答案:
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
回答 2
参见此处:http : //docs.python.org/using/windows.html
pythonw.exe“这将在启动时禁止显示终端窗口。”
回答 3
如果要从其他进程(例如,从命令行)调用python脚本,请使用pythonw.exe
。否则,您的用户将不断看到cmd
启动python进程的窗口。它仍将以相同的方式运行您的脚本,但不会影响用户体验。
例如发送电子邮件。python.exe
将弹出一个CLI窗口,发送电子邮件,然后关闭该窗口。它会以快速闪烁的形式出现,并且可能会有些令人讨厌。pythonw.exe
避免这种情况,但仍发送电子邮件。
回答 4
我正在努力使它工作一段时间。将扩展名更改为.pyw后,请确保打开文件的属性,并将“打开方式”路径定向到pythonw.exe。
回答 5
以我的经验,至少使用pygame时pythonw.exe更快。