为什么Py文件把后缀名改为Pyw不能正常运行?
知识点科普:Py是普通的Python执行文件,需要调用控制台以获得最佳调试效果
Pyw是Python GUI执行文件,通过不调用控制台,直接运行,提高运行效率。
但这也导致了一个问题:print()等打印函数不能用了。
这也是导致本期问题点:为什么Py改Pyw不能正常运行的根本原因。
早在Python2.7,官方就发现了这个问题。
这是官方的回答:
因为是英文的,这里简要概括一下:
pythonw由于没有控制台窗口,sys.stdin
, sys.stdout
, sys.stderr
都不存在,而print()
函数是调用sys.stdout
实现的,在pythonw执行时如果遇到调用sys.stdout
或者 sys.stderr
的情况会出现错误导致程序无法正常运行。
这里官方给出了解决方法:
#把以下代码加在程序第一行:
import sys, os
if sys.executable.endswith("pythonw.exe"):
sys.stdout = open(os.devnull, "w");
sys.stderr = open(os.path.join(os.getenv("TEMP"), "stderr-"+os.path.basename(sys.argv[0])), "w")
非常的好用。