扩展名改为pyw后无法运行的问题记录

转载 2016年10月01日 01:48:44

转载自:http://blog.csdn.net/chroming/article/details/52045054

py的扩展名改为pyw后在windows下直接双击运行会调用pythonw执行程序,不会打开控制台窗口,适合用来运行GUI界面的Python源码。

但在一次实际使用过程中发现在将扩展名py改成pyw后程序无法正常运行,某些功能不正常。由于没有控制台也看不到有什么错误。改回扩展名后则正常。上网搜索之后找到一个类似问题,http://stackoverflow.com/questions/24835155/pyw-and-pythonw-does-not-run-under-windows-7

问题的回答提供了如下测试办法:

pythonw myApp.py 1>stdout.txt 2>stderr.txt


使用之后发现竟然可以正常运行了。同时页面中提供了如下解决办法:

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")


在自己的代码中添加了这几句后解决问题。

具体原因回答中也说了:pythonw由于没有控制台窗口,sys.stdinsys.stdoutsys.stderr都不存在,而print()函数是调用sys.stdout实现的,在pythonw执行时如果遇到调用sys.stdout 或者 sys.stderr的情况会出现错误导致程序无法正常运行。这个问题是py2本身设计的问题,在py3中不会出现。

参考资料:

  1. 《.pyw and pythonw does not run under Windows 7》http://stackoverflow.com/questions/24835155/pyw-and-pythonw-does-not-run-under-windows-7
  2. 《pythonw.exe or python.exe?》http://stackoverflow.com/questions/9705982/pythonw-exe-or-python-exe?noredirect=1&lq=1
0

扩展名改为pyw后无法运行的问题记录

py的扩展名改为pyw后在windows下直接双击运行会调用pythonw执行程序,不会打开控制台窗口,适合用来运行GUI界面的python源码。但在一次实际使用过程中发现在将扩展名py改成pyw后程...
  • chroming
  • chroming
  • 2016年07月27日 14:15
  • 2076

python中.py和.pyw文件的区别

以下是摘录自百度问题的答案: 严格来说,它们之间的不同就只有一个:视窗运行它们的时候调用不同的执行档案。 视窗用 python.exe 运行 .py ,用 pythonw.exe 运行 .py...
  • qingyang1014
  • qingyang1014
  • 2014年08月15日 22:38
  • 3692

"*.py"和"*.pyw"的区别

python的文件格式有两种,"*.py"和"*.pyw",它们有什么不同? 问题 python的文件格式有两种,"*.py"和"*.pyw",它们有什么不同? ...
  • Hulksdnu
  • Hulksdnu
  • 2014年02月21日 15:27
  • 1390

【你不知道的Python】-【pyw】 .

python的文件一般都是.py结尾的,那么pyw是神马东西?   pyw和py其实区别很小,主要体现在win平台上开发桌面程序,linux木有哦 python.exe 运行 .py ,用 py...
  • yasenagat
  • yasenagat
  • 2012年04月25日 20:50
  • 2059

在谷歌浏览器中安装.crx扩展名的离线Chrome插件

如果用户得到的离线版的Chrome插件文件(扩展名为.crx),该如何将其安装到谷歌浏览器Chrome中去呢? 在用户使用谷歌浏览器安装Chrome插件的时候,如果网络状态允许或者用户直接在谷歌提供...
  • banrieen
  • banrieen
  • 2016年04月18日 18:01
  • 1365

将d:\java目录下的所有.java文件复制到d:\jad目录下, 并将原来文件的扩展名从.java改为.jad

public class Test3 { //判断文件名后缀是.java吗?是的话true,不是的话false private static FileFilter fileFilter = new ...
  • chenjing928
  • chenjing928
  • 2017年01月30日 14:15
  • 190

python .py .pyc .pyw 文件有什么区别

以下为参考链接,整理为方便自己学习 http://forum.digitser.cn/thread-1758-1-1.html.py 文件 以 .py 作扩展名的文件是 Python 源代码文件,...
  • marywang56
  • marywang56
  • 2017年07月10日 11:26
  • 279

利用C#进行文件后缀名的更改(以txt与html为例)

最近需要频繁更改文件的扩展名。如果一个文件夹下存在text.txt则更换为text.html。可以在内部改一下就可以进行其他扩展名的互换。C#好像没有重命名的方法,有的话就好多了。可能小白我不知道。。...
  • dongmodao
  • dongmodao
  • 2016年06月05日 23:40
  • 418

在Ubuntu系统下安装和配置Matlab R2016b

1.下载Matlab(Linux版),这里选择matlab r2016b(下载的文件包括Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd1.iso,R...
  • GJXS2017
  • GJXS2017
  • 2017年12月03日 23:25
  • 270

运行框历史记录从此不留痕

【问题】 ­ 可是,随之而来的是长长的运行框历史记录, ­ 一来,看起来心烦, 二来,稍懂电脑知识的人就可以通过运行框的历史记录运行你不想让发现的程序了。 当然也可每次手动清除, 但是,不嫌...
  • uikoo9
  • uikoo9
  • 2012年04月07日 15:50
  • 1459
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:扩展名改为pyw后无法运行的问题记录
举报原因:
原因补充:

(最多只允许输入30个字)