在C/C++代码中解析Python脚本文件的最佳方法是什么

2 投票
5 回答
3031 浏览
提问于 2025-04-16 09:18

我正在把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解释器,对吧?

4

我不知道你为什么想这么做,但最安全的方法就是让Python自己来处理解析的工作。如果你使用的是2.6之前的Python版本,可以用compiler模块。对于2.6及以后的版本,使用内置的compile函数和ast模块。在3.x版本中,你必须使用这些,因为compiler模块已经被移除了。

1

如果你想进行语法分析,可以看看Python的语法规则(也许还可以使用Bison这个工具来生成解析器)。

关于Python语法的详细说明:

撰写回答