[英]Input to a seperate file (let the user write text in a python program as it writes to a file)
[英]Dynamic python user input to a seperate C program
我有一个用Tkinter编写的python GUI界面。 该程序的要点是设置许多不同的变量,以便最终对高光谱图像(地理数据)进行计算。 现在,已经开发了一些其他规范,其中用户希望能够主动输入一些参数以用于要平滑的像素组。 该信息将在Python GUI中输入,并且处理图像修改的C程序需要此信息作为输入。 由于图像可能很大,因此我想尝试避免始终通过诸如以下的调用来重新运行C程序(这涉及内存分配,读取巨型文件等)。
os.system(./my_C_Program param1 param2 param3....)
我希望有一个系统,一旦我调用my_C_Program
,它将所有资源加载到内存中后就可以处于等待状态。 我当时在想涉及getchar()
东西,但是我不知道如何从python获取输出以转到my_C_Program
。 我已经在SO上看到了一些类似的问题,但是我无法完全确定这些方案将如何专门帮助挖掘。
如果getchar()
是答案,有人可以解释一下在打开多个终端的情况下stdout的工作方式吗?
同样,我试图使该程序在linux / mac / windows上轻松保持多平台。
总而言之,我想要以下功能:
您可能应该做的第一件事是开始使用Python的subprocess
os.system
模块 ,而不是os.system
。 完成此操作后,就可以对其进行更改,以便可以在Python中编写C程序的stdin
,而不是继承Python脚本的stdin
。
之后,您可以让Python通过C程序可以解释的方式发送数据。 例如,您可能想使用一堆JSON块,每行一个,就像Twitter的流API 1一样 ; Python脚本创建一个请求字典,使用json.dump
对其进行序列化,然后编写换行符。 C程序读取一行,解析JSON,然后处理请求。
1阅读文档后,看起来它们的实现有些复杂。 您可以采用他们的方式,也可以按照我的描述进行。
icktoofay和JasonFruit提出了体面的方法。 我将建议一些使两个程序脱钩的方法。
如果将C程序编写为在TCP套接字上侦听请求和答复的服务器 ,则可以更轻松地更改客户端,使其支持多个并发客户端,对客户端或服务器执行近乎无缝的升级,而无需修改另一种方法,或者您可以将C程序移至功能更强大的硬件,而无需做太多修改配置的事情。
打开侦听套接字并接受连接后,程序的其余部分可以继续进行,就好像您只是在通过标准输入和标准输出进行交互一样。 这已经足够好了,但是您可能更喜欢将数据编码为一些标准化的格式,例如JSON或ASN.1 ,这样可以节省一些手动的字符串处理。
你可以做的东西Pexpect的 ? 它使您可以向命令行程序提供输入,在继续之前先等待命令行中的指定提示。 它还使您能够读取中间的输出,因此您可以根据需要对此进行响应。
如果您使用的是Windows(正如我在评论中指出的那样),则可以尝试使用winpexpect ,这是相似的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.