pythonw.exe或python.exe?

时间:2012-03-14 16:30:08

标签: python python-3.x

长话短说: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>

请告诉我,我做错了什么。

6 个答案:

答案 0 :(得分:240)

总结并补充现有答案:

  • python.exe 是用于启动CLI类型脚本的控制台(终端)应用程序

    • 除非从现有的控制台窗口运行,否则python.exe 会打开一个新的控制台窗口
    • 标准流 sys.stdinsys.stdoutsys.stderr 已连接到控制台窗口
    • cmd.exe或PowerShell控制台窗口启动时,执行同步请参阅下面的eryksun第一条评论。 < / p>

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

    • 无控制台窗口已打开。
    • 执行异步
      • 从控制台窗口调用时,脚本只是启动,无论脚本是否仍在运行,提示都会立即返回。
    • 标准流 sys.stdinsys.stdoutsys.stderr 不可用
      • 警告除非您采取额外步骤,否则会产生潜在的意外副作用
        • 未处理的例外会导致脚本以静默方式中止
        • 在Python 2.x中,只是尝试使用print()会导致这种情况发生(在3.x中,print()根本无效)。
        • 在脚本中阻止,并了解详情,请参阅我的this answer
        • Ad-hoc ,您可以使用输出重定向谢谢,@ 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脚本 时,此输出重定向技术工作(而不是通过将脚本文件路径传递给pythonw.exe)。 请参阅eryksun的第2条评论及其后续跟进。

您可以控制哪些可执行文件默认运行您的脚本 - 例如从资源管理器中打开时 - 选择正确的文件扩展名

  • *.py文件默认与python.exe
  • 关联(调用)
  • *.pyw文件默认与pythonw.exe
  • 关联(调用)

答案 1 :(得分:151)

如果您不希望在运行程序时弹出终端窗口,请使用pythonw.exe;
否则,请使用python.exe

关于语法错误:print is now a function in 3.x
所以请改用:

print("a")

答案 2 :(得分:17)

见这里:http://docs.python.org/using/windows.html

pythonw.exe“这会在启动时禁止终端窗口。”

答案 3 :(得分:15)

如果您要从其他进程(例如,从命令行)调用python脚本,请使用pythonw.exe。否则,您的用户将不断看到启动python进程的cmd窗口。它仍然会运行你的脚本,但它不会干扰用户体验。

示例可能是发送电子邮件; python.exe将弹出CLI窗口,发送电子邮件,然后关闭窗口。它看起来像一个快速闪光灯,可以被认为有点烦人。 pythonw.exe可以避免这种情况,但仍会发送电子邮件。

答案 4 :(得分:2)

我努力让这个工作一段时间。将扩展名更改为.pyw后,请确保打开文件的属性并指示&#34;打开&#34; pythonw.exe的路径。

答案 5 :(得分:-2)

根据我的经验,至少使用pygame时pythonw.exe更快。