我有以下问题/疑问。也许论坛上已经有这个问题的答案,但我很难找到它,因为我不知道如何定义我的问题,在谷歌没有太多的话。
我正在使用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)
from tkinter import Tk, Button, Toplevel, Label
# import gurobipy as grb
def example(): # THIS is the function that needs to get its output in the CMD and be broken if requested, NOT PARENT
# gurobipy stuff would go here
for i in range(int(1.5e6)):
print(i)
return 'GUROBI SOLUTION'
def parent():
gurobisol = example()
b = Toplevel(root)
b.geometry('250x250')
b.configure(background='green')
c = Label(b, text=gurobisol)
c.place(relx=0.5, rely=0.5, anchor='center')
b.mainloop()
root = Tk()
root.geometry('250x250')
button = Button(root, text='Click me', command=parent)
button.place(relx=0.5, rely=0.5, anchor='center')
root.mainloop()
字符串
Thanks in advance
我在google和SO中搜索了这个,但大多数人只是试图在cmd中运行python。发现一些人在谈论os.popen()
和subprocess
,但我不知道它们到底是什么,也不知道它们是否是我需要的。
1条答案
按热度按时间mctunoxg1#
正如Greg在评论中已经提到的,你应该为你的应用程序使用Gurobi Callbacks。这将允许你停止当前的优化,检查进度(原始和双重边界),还可以访问通常在终端和/或日志文件中结束的所有日志行。
在这个例子中,你可以看到许多不同的回调函数:callback.py