【问题标题】:how to replace subprocess.Popen(), is blocking Tkinter after conversion to exe如何替换 subprocess.Popen(),在转换为 exe 后阻塞 Tkinter
【发布时间】:2021-06-07 08:24:51
【问题描述】:

部分代码:

class A:
    def __init__(self,my_arg):

      do sth...

    def f1(self):

       one = (sys.executable, "script.py")
       output = subprocess.Popen(one, stdout=subprocess.PIPE)

    def f2(self):

       do_sth...

class program(tk.Tk):
    def __init__(self):
        super().__init__()
        ...
        
        button_run  = Button(root)
        button_run.configure(command = self.run_program)
        root.mainloop()

    def run_program(self): 
        file_list = ['file1','file2']
        for file in file_list:
           cls_A = A(file)
           cls_A.f1()
           cls_A.f2()

if __name__== '__main__':
   program()

问题:

我已经阅读了很多关于这个问题的主题,但没有看到任何解决方案。 子进程在转换为 exe 后阻塞 Tkinter,并且我的程序与从脚本运行的程序不同,单击 RUN 按钮后正在创建新的 tkinter 窗口并再次...

我知道这个问题与子进程部分有关,如何运行与子进程相同但不同的外部模块?

此解决方案不起作用:pyInstaller loads script multiple times

【问题讨论】:

  • 主窗口是重新生成还是创建了一个新窗口?另外,您是否在主循环中使用过multiprocessing?因为这将再次为不同的进程生成一个新窗口。
  • @AST 很有趣!是的,每次“点击”都会创建该程序的新窗口
  • 我明白了,能否请您展示一下A 的课程是做什么的,或者创建一个minimal, reproducible example 来试试?
  • @AST 我正在尝试“重新制作”示例,但它很难,它的程序很大,我无法将所有 i 粘贴到这里,但你能告诉我如何在这里使用多处理吗?
  • 嗯,我的意思是如果你使用multiprocessing,可能会出现问题,你不必使用它。至少尝试提及它执行什么样的操作。在当前代码中似乎没有什么可疑之处,除了对 A 类中的函数的调用。

标签: python tkinter subprocess pyinstaller


【解决方案1】:

由于这条线而出现问题

one = (sys.executable, "script.py")

这在文档here中已经提到

当一个普通的 Python 脚本运行时,sys.executable 是被执行的程序的路径,即 Python 解释器。在冻结的应用程序中, sys.executable 也是已执行程序的路径,但它不是 Python;它是单文件应用程序中的引导加载程序或单文件夹应用程序中的可执行文件。

因此,您的 exe 会重新启动并且脚本不会被执行。

您可以尝试使用import script 将脚本作为模块导入,并使用OOP 来简化执行。如果脚本被阻塞,那么您可以使用threading 在不同的线程中启动它,如果脚本需要在单独的主线程中执行,那么您可以为您的脚本创建另一个可执行文件并调用它(如果使用@ 987654325@模式,你可以创建一个python文件,导入主脚本和其他脚本的依赖关系并建立一个基本文件夹,你可以稍后在相同模式下创建2个exe并将它们放在公共基本目录中,相对较少整体大小)。

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 2013-05-24
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多