一尘不染

pythonw.exe还是python.exe?

python

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

请告诉我我在做错什么。


阅读 880

收藏
2020-02-18

共2个答案

一尘不染

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

关于语法错误:print 现在是3.x中的函数,请
改用:

print("a")
2020-02-18
一尘不染

总结和补充现有的答案:

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

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

  • 标准流 sys.stdin,sys.stdout并且sys.stderr被连接到控制台窗口。
  • 从或PowerShell控制台窗口启动时,执行是同步的cmd.exe:请参阅下面的eryksun的第一条评论。
  • 如果创建了新的控制台窗口,它将保持打开状态,直到脚本终止。
  • 从现有控制台窗口中调用时,提示被阻止,直到脚本终止。
  • pythonw.exe是一个用于启动GUI /无UI脚本的GUI应用。

  • 没有打开控制台窗口。

  • 执行是异步的:
  • 从控制台窗口中调用时,无论脚本是否仍在运行,脚本只会启动,并且提示会立即返回。
  • 标准流 sys.stdin,sys.stdout并且sys.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,而你不是在标准输出输出,使用从注释兴趣@拉手的命令:
    pythonw.exe yourScript.pyw 1>NUL 2>&1
    买者:这个输出重定向技术确实不调用工作时*.pyw脚本直接(而不是将脚本文件路径传递到pythonw.exe)。请参阅下面的eryksun的第二条评论及其后续意见。
    通过选择正确的文件扩展名,你可以控制默认情况下哪个可执行文件运行脚本(例如从资源管理器打开时):

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

  • *.pyw 默认情况下,文件与以下文件关联(调用) pythonw.exe
2020-02-18