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.stdinsys.stdoutsys.stderr 连接到控制台窗口
    • cmd.exe或PowerShell控制台窗口启动时执行同步请参阅下面的eryksun的第一条注释。

      • 如果创build了新的控制台窗口,它将保持打开状态,直到脚本终止。
      • 从现有控制台窗口调用时,提示将被阻止,直到脚本终止。
  • pythonw.exe是一个GUI应用程序启动GUI /无UI的所有脚本

    • 没有控制台窗口打开。
    • 执行是asynchronous的
      • 从控制台窗口调用时,脚本仅启动,并立即返回,不pipe脚本是否仍在运行。
    • 标准stream sys.stdinsys.stdoutsys.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。