阿亮_ 2019-06-21 01:19 采纳率: 0%
浏览 683

PyQt5中使用了subprocess.Popen,在eric6中运行ping命令正常,但是打包后运行不正常

运行环境:
pyqt5+python3

编辑器:eric6

在eric6中运行正常,ping命令也正常,如图

图片说明

但是使用pyinstaller打包以后,每点一次Run,都会自动新建一个窗口,无法正常返回ping命令的结果。

图片说明

输入“dir”“ipconfig”这样一次就出来的命令又没问题。ping是一秒一行结果

部分代码如下:
pi= subprocess.Popen(order,shell=True,stdout=subprocess.PIPE)
for line in iter(pi.stdout.readline,'b'):
#读取line操作

请各位大大看下是什么情况

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 12:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    从你的描述来看,你似乎遇到了一个问题,当使用pyinstaller打包后的程序运行时,每次运行都创建了一个新的窗口,并且不能正确地显示输出。这是一个常见的问题,通常可以通过以下步骤来解决:

    1. 确保 pyinstallerpyqt5 已安装

    首先检查你的系统是否已经安装了pyinstallerpyqt5。如果未安装,请通过以下命令安装:

    pip install pyinstaller
    pip install PyQt5
    

    2. 检查 pyinstaller 的配置

    确保你的pyinstaller设置正确。可以查看其帮助文档或搜索网络了解如何调整pyinstaller的配置。

    例如,如果你使用的是Windows平台,可能需要指定特定的Python解释器路径或者指定库的位置。

    pyinstaller --onefile your_program.py
    

    3. 清理 pyinstaller 的临时文件

    有时候,pyinstaller会在运行过程中生成大量的临时文件,这些文件可能会导致一些问题。你可以尝试删除它们,但请注意这可能会导致程序的一些功能缺失。

    pyinstaller --clean your_program.py
    

    4. 调整输出流

    为了防止重复打开窗口的问题,可以在每次运行时清空管道:

    import sys
    from io import StringIO
    
    sys.stderr = StringIO()
    

    然后重置管道:

    sys.stderr = sys.__stderr__
    

    最后,将错误处理添加到循环中:

    for line in iter(sys.stderr.getvalue(), ''):
        print(line.strip())
    

    5. 使用不同的工作目录

    有时,不同应用程序在同一目录下的时候,可能会因为路径冲突而出现问题。尝试使用不同的工作目录进行测试,看看是否有差异。

    cd /path/to/your/directory
    pyinstaller --onefile your_program.py
    cd -
    

    6. 检查 Python 解释器

    确保你使用的Python版本支持subprocess.Popen。如果发现版本过低,升级Python版本可能是解决问题的关键。

    7. 检查库位置

    确保pyqt5的安装路径没有被更改。

    8. 测试其他命令

    尝试其他命令,看看是否所有命令都能正常运行。这有助于确定问题的具体原因。

    希望以上建议能帮助你解决问题!

    评论

报告相同问题?