pythonw.exe还是python.exe?

2024-04-24 23:11:59 发布

您现在位置:Python中文网/ 问答频道 /正文

长话短说:pythonw.exe什么也不做,python.exe什么也不接受(我应该用哪个?)

测试.py:

print "a"

命令窗口:

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>

请告诉我我做错了什么。


Tags: pathpytest命令lineexefileprint
3条回答

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

关于语法错误:printis now a function in 3.x
因此,请使用:

print("a")

总结和补充现有答案:

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

    • 除非从现有控制台窗口运行,python.exe将打开一个新的控制台窗口
    • 标准流sys.stdinsys.stdoutsys.stderr连接到控制台窗口
    • cmd.exe或PowerShell控制台窗口启动时,执行是同步的:请参阅下面eryksun的第一条注释。

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

    • 没有打开控制台窗口。
    • 执行是异步的:
      • 当从控制台窗口调用脚本时,无论脚本是否仍在运行,脚本只会启动并立即返回提示。
    • 标准流sys.stdinsys.stdoutsys.stderr不可用。
      • 注意除非您采取额外步骤,否则可能会产生意想不到的副作用:
        • 未处理的异常导致脚本以静默方式中止。
        • 在Python 2.x中,只要尝试使用print()就可能导致这种情况发生(在3.x中,print()根本没有效果)。
        • 要在脚本中避免这种情况,并了解更多信息,请参见我的this answer
        • 特别的,您可以使用输出重定向谢谢,@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的第二条评论及其后续内容。

您可以通过选择正确的文件扩展名来控制默认情况下运行脚本的可执行文件:

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

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

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

相关问题 更多 >