在python gui和在Tcl/Tk中开发的现有应用程序之间进行通信

在python gui和在Tcl/Tk中开发的现有应用程序之间进行通信,python,Python,我有一个gui,其中有几个功能。现在我想让gui与已经存在的Medina预处理器对话,Medina预处理器是用Tcl/Tk开发的。在gui中,当我按下按钮时,进程应该通过管道与medina通信。 medina预处理器可以通过管道与python脚本通信。但我不知道怎么做。要了解什么是medina,可以查看此文档 有谁能建议我如何进行以及需要哪些模块使用从Python程序启动Medina进程 medina对象现在具有属于文件对象的属性medina.stdin、medina.stdout和medina

我有一个gui,其中有几个功能。现在我想让gui与已经存在的Medina预处理器对话,Medina预处理器是用Tcl/Tk开发的。在gui中,当我按下按钮时,进程应该通过管道与medina通信。 medina预处理器可以通过管道与python脚本通信。但我不知道怎么做。要了解什么是medina,可以查看此文档


有谁能建议我如何进行以及需要哪些模块

使用从Python程序启动Medina进程

medina
对象现在具有属于文件对象的属性
medina.stdin
medina.stdout
medina.stderr
。您可以从stdout和stderr中读取数据,然后写入stdin以与medina进程通信

请注意,虽然文档建议您使用
communicate()
方法,但此方法只能使用一次,因为它会等待子进程退出


但您可能希望使用定期检查上述文件stdin和stdou是否有可供读取的材料,以便缓冲区不会填满。

我敢打赌,此代码的90%与您的问题完全无关。我不愿意为了发现我是对的而阅读所有的内容。请参阅以获取有关提问更好问题的帮助。抱歉@abarnert我删除了代码,我只需要知道如何在python和tcl/tk应用程序之间通信,tcl/tk应用程序可以通过管道接收命令。通常,您至少有两个选项:tcp/udp套接字或webservices@matcheek:没有,可以通过管道接收命令的应用程序不需要套接字或web服务。@AbarNet:没有听说过没有std io管道的应用程序:)所有这些应用程序都有。我的观点与那些没有使用套接字管道(或web服务)的前端接口的脚本不同,这绝对不是推荐的做法。这种交流在几十年前已经很普遍了,现在你有很多其他的选择,可以让调试和维护变得轻松。我理解你的方法。在gui中,我所做的是自动化一个过程,即我必须检查在medina gui中导入的模型是否符合质量标准,为此,我必须在medina gui命令行中逐个键入命令。现在我的问题是,我可以通过管道将命令传递给medina gui并自动使其处理command@ayaan您必须查阅medina的文档以了解这是否可行。请注意,select不能用于Windows上的管道,并且只能在某些Unix平台上显式地将fcntl转换为非阻塞的管道上使用,并且对于某些Unix平台上的可读性(无论是否阻塞),将始终返回true。如果您需要做任何有趣的事情,那么在PyPI上搜索异步子流程包装器是值得的。或者,有时候,使用pexpect或类似的方法。我认为您上面写的过程很有效,谢谢@Roland Smith听起来有点像您想要pexpect(),它是为这里的用例而设计的。
 import subprocess

 args = ['medina'] # Add other string arguments if necessary
 medina = subprocess.Popen(args,
                           stdout=subprocess.PIPE,
                           stdin=subprocess.PIPE,
                           stderr=subprocess.PIPE)