Pythonw.exe还是Python.exe?

11 浏览
0 Comments

Pythonw.exe还是Python.exe?

长话短说:pythonw.exe什么都不做,python.exe不接受任何输入(我应该使用哪一个?)

test.py:

print "a"

CMD窗口:

C:\path>pythonw.exe test.py

C:\path>
C:\path>python.exe test.py
  File "C:\path\test.py", line 7
    print "a"
            ^
SyntaxError: invalid syntax
C:\path>

请告诉我我做错了什么。

admin 更改状态以发布 2023年5月25日
0
0 Comments

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

关于语法错误: print 在3.x版本中已成为一个函数。因此,请改用以下语法:

print("a")

0
0 Comments

总结和补充现有答案:

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

    • 除非从现有控制台窗口运行,否则 python.exe 会打开一个新的控制台窗口。

    • 标准流 sys.stdinsys.stdoutsys.stderr 与控制台窗口相连接。

    • 如果从 cmd.exe 或 PowerShell 控制台窗口启动,执行是同步的:请参见下面的 eryksun 的第一个评论。

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

    • 不会打开控制台窗口。

    • 执行是异步的:

      • 如果从控制台窗口调用,脚本只是启动了,并且无论脚本是否仍在运行,提示符都会立即返回。
    • 标准流 sys.stdinsys.stdoutsys.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 中悄悄失败的唯一原因,而且您不感兴趣 stdout 输出,请使用 @handle 在评论中的命令:
            pythonw.exe yourScript.pyw 1>NUL 2>&1
            警告:当直接调用 *.pyw 脚本时,此输出重定向技术无效(而不是将脚本文件路径传递给 pythonw.exe)。请参见下面的 eryksun 的第二个评论及其后续评论。

您可以通过选择正确的文件名扩展名控制默认运行哪个可执行文件(例如,从资源管理器打开时):

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