在C/C++代码中解析Python脚本文件的最佳方法是什么
我正在把Python嵌入到C/C++程序中。
我想做的是从C/C++程序中解析一个Python脚本文件,把这个文件分成几个“块”,每个“块”都是一个有效的Python命令。我需要把每个块放到std::string
里。例如:
#PythonScript.py
import math
print "Hello Python"
i = 0;
while (i < 10):
print "i = " , i;
i = i + 1;
print "GoodBye Python"
这个脚本里有5个不同的“块”:
- 第一个是
"import math;"
- 第二个是
"print "Hello Python;"
- 第三个是
"i = 0;"
第四个是
while (i < 10):\n\tprint "i = " , i;\n\ti = i + 1;
我对Python的了解非常基础,对Python代码的语法也不太熟悉。请问有什么好的方法可以做到这一点?有没有Python的C/C++ API函数可以支持这个?
我需要这样做的原因是为了图形用户界面(GUI)。我的程序是用C写的,使用Python来进行一些计算。我从C代码中调用Python C API,运行Python脚本,而我需要的是一种方法来捕捉Python在我程序中的输出。我能捕捉到输出,一切都很好,但问题是当脚本需要用户输入时。发生的情况是,我在脚本结束后捕捉到Python的输出,因此当脚本中有输入命令时,我会看到一个黑屏……我需要在输入命令之前捕捉到所有的打印输出。
我尝试的第一个解决方案是把脚本解析成有效的命令,然后一个一个地运行这些命令……为此,我需要解析脚本并决定什么是命令,什么不是……问题是:有什么好的方法可以做到这一点吗?或者有没有现成的工具可以实现这个?
5 个回答
1
我觉得你可能在做一些多余的工作,因为其实有一个功能可以让你在其他应用程序中嵌入Python,具体可以参考这个链接:Embedding Python in Another Application facility。你可以通过Python/C API直接执行你的脚本。我想你并不想从头开始编写一个Python解释器,对吧?
1
如果你想进行语法分析,可以看看Python的语法规则(也许还可以使用Bison这个工具来生成解析器)。
关于Python语法的详细说明: