繁体   English   中英

子进程不适用于 pyinstaller

[英]Subprocess does not work with pyinstaller

我有以下在 Spyder 上运行良好的示例脚本。 例如,我使用了 Windows 命令dir /w 我真正的问题是我需要启动一个外部实用程序,但这个简单的示例显示了同样的问题:

import tkinter as tk
from tkinter import *

scriptpath=os.path.abspath(os.path.dirname(__file__))

def doit():
    cmdlst = ["dir", "/w"]
    foutput=scriptpath + "\\" + "result.txt"
    
    if os.path.exists(foutput):
      os.remove(foutput)
    with open(foutput, "w") as fresult:  
      result = subprocess.run(cmdlst, stdout=fresult, text=True, shell=True)


myDia = tk.Tk()
bt1=tk.Button(myDia, text="DoIt", command=doit, width=16, height=2)
bt1.grid(row=0, column=0, sticky='W', padx=0, pady=0)

myDia.mainloop()

当我从 Anaconda 提示符编译它时:

pyinstaller --onefile subproc.pyw

它将生成exe。 运行它时,它将启动对话框。 按下按钮时会创建一个空文件“result.txt”,但没有内容也没有错误。 该程序只是挂起。

为什么编译后的 exe 没有像 Spyder 中的.pyw文件那样给出预期的结果? 请注意,Tkinter 对话框似乎与导致此问题有关。 删除 Tkinter 对话框并将文件重命名为 .py 会生成一个工作编译程序。

感谢您的检查。 它促使我使用 Python 3.9 和 Pyinstaller 5.1 进行测试,我可以确认这如您所描述的那样工作。 所以它一定是在较新版本中解决了一些问题(在 Python 3.7 和 pyinstaller 4.1 中检测到问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM