我有一个使用 tk() 的图形程序 (k40-whisperer.py)。我添加了 CLI 功能,当我通过带显示器的计算机运行它时,它可以工作。
我想通过 exec() 函数(例如通过 ssh)或通过 php exec 命令来运行它。问题是当我这样做时,我得到了与显示相关的错误。
$ laser
Traceback (most recent call last):
File "./k40_whisperer.py", line 3855, in <module>
root = Tk()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1822, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "0.0"
我尝试通过会话设置显示端口,ssh -X
但它不喜欢这样,而且我实际上也不想要它。
我尝试添加:
import matplotlib
matplotlib.use('Agg')
在读到 matplotlib 分配了自己的显示端口后,我仍然收到相同的错误。还有哪些其他方法可以通过 shell 执行图形程序?同样,我不想也不关心在任何时候有 GUI,我只想向程序发送 cli 参数并让它运行。
您可以假设删除对 tk() GUI 对象的所有引用将非常繁琐。
本着编辑源代码以抑制图形输出的精神,我尝试了root.withdraw()
仍然出现相同的错误,即使在图形会话中运行源代码时没有显示窗口。
tkinter 的初始化发生在以下代码行中:
root = Tk()
root.withdraw()
app = Application(root)