今天我打包成exe的时候遇到了这种问题,不加-w就能正常运行。加了-w隐藏终端程序就无法正常运行了。
import traceback
import logging
logging.basicConfig(filename='log.txt', level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
try:
raise Exception('发生异常错误信息')
except:
#方案一,自己定义一个文件,自己把错误堆栈信息写入文件。
#errorFile = open('log.txt', 'a')
#errorFile.write(traceback.format_exc())
#errorFile.close()
#方案二,使用Python标准日志管理维护工具。
logging.debug(traceback.format_exc())
把异常输出到文件然后分析文件得Traceback (most recent call last):
File "xiguagui_rc4.py", line 539, in <module>
danmu = xigua_gui()
File "xiguagui_rc4.py", line 44, in __init__
self.get_cpu_info()
File "xiguagui_rc4.py", line 29, in get_cpu_info
a = os.popen("wmic diskdrive get serialnumber").read().split()[-1]
File "os.py", line 983, in popen
File "subprocess.py", line 804, in __init__
File "subprocess.py", line 1142, in _get_handles
OSError: [WinError 6] The handle is invalid出结果
我这里用到了os.popen这个函数。因为这个函数是利用cmd窗口获取一些返回值信息,如果隐藏终端窗口运行的话必然会报错。
必须改成如下方法执行
def subprocess_check_output(*args):
p = subprocess.Popen(*args,shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
msg = ''
for line in p.stdout.readlines():
msg += line.decode()
status = p.wait()
return msg
deviceInfo = subprocess_check_output('adb devices').split("\r\n")
然后替换自己的方法,解决bug
参考 https://my.oschina.net/u/2396236/blog/1610765
https://blog.csdn.net/weixin_40306397/article/details/103206309