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