将Python GUI应用与C控制台应用集成的最简单方法

3 投票
2 回答
1061 浏览
提问于 2025-04-15 18:07

我有一个C语言的控制台应用程序,它可以把C文件转换成HTML文件,C文件的位置是通过命令行参数传给程序的。(这个应用是为Windows平台开发的)

我想做的是创建一个Python的图形界面应用,让用户可以选择一个文件,然后把这个文件的位置传给C应用进行处理。

我已经知道怎么用tkinter创建一个基本的Python图形界面,但我不知道怎么把这两个程序整合在一起,也找不到有用的信息。

也许可以用pOpen()方法把字符串传给C应用?(但我不知道怎么做…)

注意:我对Python还很陌生,所以代码示例可能会比单纯的描述更有帮助,(因为我对所有Python库都不太熟悉),不过任何帮助我都非常感激。

2 个回答

2

有很多方法可以做到这一点,但在你的情况下,需求看起来非常简单,你只需要使用来自 subprocess 模块的 Popen

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

如果你需要把结果返回给调用者,可以使用一个管道(PIPE)来处理标准输出(stdout),然后在子进程完成后从中读取结果数据。

10

你可能想要使用 subprocess 模块。

最基本的用法是:

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

这段代码会运行你指定的程序,并传入参数,然后返回这个程序的返回码。

需要注意的是,subprocess.call 会一直等到程序运行完毕才会继续执行,所以如果这个程序运行得比较慢,你的 Tkinter 界面就会停止更新,直到程序完成。

如果你想要更高级的用法,可以考虑使用 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

撰写回答