将python gui应用程序与c控制台应用程序集成的最简单方法

时间:2010-01-17 18:09:12

标签: python c user-interface integrate

我有一个c控制台应用程序将c文件转换为html文件,c文件位置作为命令行参数传递给程序。(该应用程序适用于Windows平台)

我想做的是拥有一个python gui应用程序,允许用户选择一个文件并将文件的位置传递给c app进行处理。

我已经知道如何使用tkinter创建一个基本的python gui,但我无法弄清楚或找到有关如何整合这两个程序的任何有用信息。

也许可以使用pOpen()方法将字符串传递给c app? (但我无法弄清楚如何......)

注意:我是python的新手,所以代码示例可能有用,而不仅仅是描述,(因为我不熟悉所有的python库等),尽管任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:10)

您可能需要subprocess模块。

至少:

import subprocess
retcode = subprocess.call(["/path/to/myCprogram", "/path/to/file.c"])
if retcode == 0:
   print "success!"

这将使用参数运行程序,然后返回其返回码。

请注意,subprocess.call将在程序完成之前阻塞,因此如果它不是快速运行的,则整个Tkinter GUI将停止重绘,直到程序完成。

要获得更高级的使用效果,您可能需要使用subprocess.Popen。这将要求您在命令完成之前进行轮询,但允许您以较少的阻塞进行轮询。

如果你的C程序将HTML打印到标准输出,你需要像这样管道输出:

proc = subprocess.Popen(["/path/to/myCprogram", "/path/to/file.c"], 
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err_output = proc.communicate()
# output will now contain the stdout of the program in a string

答案 1 :(得分:2)

您可以通过多种方式实现这一目标,但在您的情况下,您只需要使用Popen模块中的subprocess即可满足要求。

 process = subprocess.Popen(['myutil', file_location]...)
 process.wait()

如果需要将结果返回给调用者,请对stdout使用PIPE,并在子进程完成时从中读取结果数据。