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>
请告诉我我做错了什么。
如果您不想在运行程序时popupterminal窗口,请使用pythonw.exe
;
否则,使用python.exe
关于语法错误: print
现在是3.x中的一个函数
那么改用:
print("a")
总结和补充现有的答案:
-
python.exe
是用于启动CLItypes脚本的控制台(terminal)应用程序。- 除非从现有的控制台窗口运行,
python.exe
打开一个新的控制台窗口 。 - 标准stream
sys.stdin
,sys.stdout
和sys.stderr
连接到控制台窗口 。 -
从
cmd.exe
或PowerShell控制台窗口启动时执行同步 : 请参阅下面的eryksun的第一条注释。- 如果创build了新的控制台窗口,它将保持打开状态,直到脚本终止。
- 从现有控制台窗口调用时,提示将被阻止,直到脚本终止。
- 除非从现有的控制台窗口运行,
-
pythonw.exe
是一个GUI应用程序启动GUI /无UI的所有脚本 。- 没有控制台窗口打开。
- 执行是asynchronous的 :
- 从控制台窗口调用时,脚本仅启动,并立即返回,不pipe脚本是否仍在运行。
- 标准stream
sys.stdin
,sys.stdout
和sys.stderr
不可用 。- 警告 : 除非您采取额外步骤 , 否则 可能会产生意想不到的副作用 :
- 未处理的exception会导致脚本无声地中止 。
- 在Python 2.x中,简单地使用
print()
会导致这种情况发生 (在3.x中,print()
根本没有效果)。 - 为了防止在你的脚本中 ,并了解更多,请参阅我的这个答案 。
- 特别的 ,你可以使用输出redirect : 谢谢,@ 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
脚本时(与通过将脚本文件path传递给pythonw.exe
),此输出redirect技术不起作用。 请参阅下面的eryksun的第二条评论及其后续内容。
- 警告 : 除非您采取额外步骤 , 否则 可能会产生意想不到的副作用 :
您可以通过select正确的文件扩展名来控制哪些可执行文件默认运行脚本 – 例如从资源pipe理器打开时 –
-
*.py
文件默认与python.exe
关联(调用) -
*.pyw
文件默认与pythonw.exe
关联(调用)
看到这里: http : //docs.python.org/using/windows.html
pythonw.exe“这会禁止启动时的terminal窗口。”
如果您打算从某个其他进程(比如从命令行)调用python脚本,请使用pythonw.exe
。 否则,你的用户将不断看到一个cmd
窗口启动python进程。 它仍然可以运行你的脚本,但不会侵入用户体验。
一个例子可能是发送电子邮件; python.exe
会popup一个CLI窗口,发送邮件,然后closures窗口。 它会显示为一个快速闪光,可以被认为有点讨厌。 pythonw.exe
避免了这一点,但仍然发送电子邮件。
我正努力让这个工作一段时间。 一旦将扩展名更改为.pyw,请确保打开文件的属性并将“打开方式”path指向pythonw.exe。