亲爱的Stackoverflow社区,
我使用Selenium和Python来自动化一项任务。当我的程序以www.example.com的身份运行时myscript.py,它可以无缝地工作。我使用以下代码将myscript.py转换为myscript.exe:
PyInstaller --onefile --windowed --icon="icon.ico" --add-data "icon.ico;." myscript.py
生成的myscript.exe文件不起作用,并出现以下错误:
Traceback (most recent call last):
File "myscript.py", line 155, in <module>
File "myscipt.py", line 32, in main
File "webdriver_manager\chrome.py", line 39, in install
File "webdriver_manager\core\manager.py", line 30, in _get_driver_path
File "webdriver_manager\core\download_manager.py", line 28, in download_file
File "webdriver_manager\core\http.py", line 35, in get
File "webdriver_manager\core\utils.py", line 289, in show_download_progress
File "tqdm\std.py", line 1109, in __init__
File "tqdm\std.py", line 1361, in refresh
File "tqdm\std.py", line 1509, in display
File "tqdm\std.py", line 350, in print_status
File "tqdm\std.py", line 343, in fp_write
File "tqdm\utils.py", line 89, in __getattr__
AttributeError: 'NoneType' object has no attribute 'write'
主线中的第32行为:
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
我可能错过了一些基本的东西。任何来自社区的帮助都是非常感谢的。
1条答案
按热度按时间1rhkuytd1#
问题是webdriver_manager使用tqdm在
show_download_progress
函数执行期间在终端显示进度条,但是由于您使用的是--windowed
选项和pyinstaller
,所以程序不是在终端上运行的,所以当tqdm试图显示进度条时,没有任何内容可供写入,这就是为什么它显示NoneType object has no attribute 'write'
。这通常可以通过以下方法解决:在应用程序入口点附近使用
write
方法将stdout
和stderr
显式设置为对象,以便在任何其他代码尝试写入它们之前设置它们。例如: