Python,tkinter --立即打开一个cmd或类似的文件,并打印“实时”输出;然后关闭它,

ejk8hzay  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(215)

我有以下问题/疑问。也许论坛上已经有这个问题的答案,但我很难找到它,因为我不知道如何定义我的问题,在谷歌没有太多的话。
我正在使用tkinter(我稍后将使用pyinstaller打包它)和GUROBI(这是一个优化软件)开发一个GUI应用程序。
比如说,在按下button之后,我将执行function(该函数使用guideline的函数)。当使用guideline的函数时,它们将print数据存储在我的console中关于process的数据。
事情是这样的:
1.当我按下button时,我想打开一个cmd窗口或类似的窗口,并print那里的所有内容,直到函数完成。然后关闭它。它必须使用我当前的venv
1.如果用户需要,我必须给予他stopping进程的机会,并检索找到的最新解决方案。在PyCharm中,当我运行脚本时,我通常有这个红色按钮来停止它(image 1);但是当运行gurobi进程时,我必须按两次而不是一次来杀死所有进程(如果我只按一次,只有gurobi进程停止并获得最新的解决方案,然后我的脚本在完成我创建的函数后正常继续-这是我想要的,但在新创建的cmd窗口或类似窗口中)。
为了澄清,我提供了这个MRE。我不能展示功能(2)是如何工作的,因为你需要一个Gurobi许可证来复制代码,所以我刚刚描述了这个功能。此外,我提供了一个图像(image 2),它显示了gurobi在控制台中打印的“东西”
Image1
x1c 0d1x的数据
Image2



MRE:(不带guidance)

  1. from tkinter import Tk, Button, Toplevel, Label
  2. # import gurobipy as grb
  3. def example(): # THIS is the function that needs to get its output in the CMD and be broken if requested, NOT PARENT
  4. # gurobipy stuff would go here
  5. for i in range(int(1.5e6)):
  6. print(i)
  7. return 'GUROBI SOLUTION'
  8. def parent():
  9. gurobisol = example()
  10. b = Toplevel(root)
  11. b.geometry('250x250')
  12. b.configure(background='green')
  13. c = Label(b, text=gurobisol)
  14. c.place(relx=0.5, rely=0.5, anchor='center')
  15. b.mainloop()
  16. root = Tk()
  17. root.geometry('250x250')
  18. button = Button(root, text='Click me', command=parent)
  19. button.place(relx=0.5, rely=0.5, anchor='center')
  20. root.mainloop()

字符串
Thanks in advance
我在google和SO中搜索了这个,但大多数人只是试图在cmd中运行python。发现一些人在谈论os.popen()subprocess,但我不知道它们到底是什么,也不知道它们是否是我需要的。

mctunoxg

mctunoxg1#

正如Greg在评论中已经提到的,你应该为你的应用程序使用Gurobi Callbacks。这将允许你停止当前的优化,检查进度(原始和双重边界),还可以访问通常在终端和/或日志文件中结束的所有日志行。
在这个例子中,你可以看到许多不同的回调函数:callback.py

相关问题