[英]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.