将Python GUI应用与C控制台应用集成的最简单方法
我有一个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