2010-01-17 80 views
3

我有交流控制台应用程序将ac文件转换为html文件,c文件位置作为命令行参数传递给程序(该应用程序是为Windows平台)最简单的方式来集成Python GUI应用程序与C控制台应用程序

我希望做的是有一个python GUI应用程序,允许用户选择一个文件,并将该文件的位置来进行处理的C程序。

我已经知道如何创建一个Tkinter的一个基本的Python贵,但我不能找出或发现,我怎么会去intgrating两个方案的任何有用的信息。

也许有可能通过pOpen()方法将字符串传递给c应用程序? (但我不知道如何...)

注意:我新来python所以代码示例可能会有所帮助,而不仅仅是描述(因为我不熟悉所有的python库等),虽然任何不胜感激。

回答

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 
+0

感谢您的快速回复。我创建了脚本来测试subprocess.call方法,在文件名等硬编码,它运行良好,现在我想我需要学习更多的python和Tkinter,以便我可以弄清楚如何把它放在一起,我的OO编程技能是一点生锈...... – volting 2010-01-17 21:26:23

+0

好吧,我设法把它放在一起,后来我认为这简单得多。我遇到了一些只是语法错误的问题,现在我的开发环境基本上都是基本上由记事本++组成的,所以当我有时间时,我会研究一个更全面的解决方案,无论如何,我正在漫无目的地... Now Iv'e实现了我的初始目标,Im对我如何能够实现更高级别的集成感兴趣,Iv使用.pyw扩展名,以便dos窗口仅在瞬间弹出,但如果它没有一点都不。有没有一种简单的方法来做.... – volting 2010-01-18 23:25:57

+0

...这没有去创建一个dll和从python应用程序内调用c函数的麻烦。 – volting 2010-01-18 23:28:13

2

有很多的,你可以达致这方面,但在你的情况下,需求似乎所以你只需要使用subprocess模块中的Popen

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

如果你需要得到的结果返回给调用者,使用管道的标准输出,当子进程已经完成从中读取结果数据。