如何让Python GUI调用用C编写的遗传算法

我是Stack Overflow的新手。 我有一个用C编写的遗传算法,它以0-100的forms接受用户输入,并输出一个数字数组。 C代码是一个完整的独立编译程序。 它有一个命令行界面。 我对编程比较陌生,主要是黑客攻击,直到找到特定任务的解决方案。 我在阅读Python Subprocess管理文档时非常困惑。 我有一个使用tkinter用Python编写的GUI,我有一个框,用户可以在其中键入他们的响应值(0-100)。 我的代码中也有一个空数组,我希望用遗传算法的输出填充。 用户将使用该数组作为某些内容,给出另一个响应(0-100)C代码将获取该响应,生成另一个数字数组,并继续该过程。 我的问题是,任何人都能用简单的术语向这个新手解释如何使用子进程模块将我的python GUI和C代码遗传算法链接到一起吗? 谢谢!

我假设您能够存储用户在变量中输入的文本? 如果没有, 这个问题很好地解释了它。 无论如何,一旦你得到它,像这样调用subprocess.check_output:

  result = subprocess.check_output(["./cexecutable", inputValue]) 

(将“cexecutable”替换为您的遗传算法程序的可执行文件的名称,并将inputValue替换为您存储输入的任何变量)

这应该将遗传算法的输出存储在结果中。 它将是一个字符串,因此如果有多行输出,您可能需要调用result.split("/n")来获取行列表。 然后,您可以根据它们的格式化解析它们并根据需要将它们放入数组中。

假设您有一些与文本框关联的“输入”按钮,并且您将这一切都视为单击按钮时发生的事件,则每次用户输入新文本并单击按钮时都会发生这种情况。

编辑 (回应评论):为了使程序在后台运行,您需要使用Popen.communicatePopen.communicate 。 这将创建一个可以继续与之交互的Popen对象,而不仅仅是返回程序的输出。 如果不对您的代码进行测试,我不能保证下面的代码会完全符合您的要求,但我认为它应该接近:

  genAlg = subprocess.Popen(["./executable"]) ... #user enters data ... result = genAlg.communicate(inputValue)[0] #communicate sends the given argument to stdin, and returns a #tuple (stdout, stderr) - you want stdout, hence the "[0]" 

编辑2:事实certificate,这实际上并不是一个可行的解决方案 – 请参阅下面的JF Sebastian的评论。