【问题标题】:python embedding in C : define the python script as a C string?python嵌入C:将python脚本定义为C字符串?
【发布时间】:2015-09-14 08:36:12
【问题描述】:

我想在 C 中调用以下 python 脚本:

#!/usr/bin/python2.7

import parser

def evaluate(text):
   code = parser.expr(text).compile()
   return eval(code)

如下页https://docs.python.org/2/extending/embedding.html 中所述,我可以使用文件的 pwd(path) 从 C 调用此脚本。

但是,我想知道是否可以通过直接在 C 字符串上调用 python 来定义脚本来不加载脚本。

例如,我想说我把:

#define PYTHON_SCRIPT ((char*)(\      
  import parser\  
  \                    
  def evaluate(text):\   
    code = parser.expr(text).compile()\  
    return eval(code)\ 
  ))

是否可以直接在该字符串上调用 python 解释器?

确实,知道我需要将文本作为变量传递,我不能使用这个 Pyrun_SimpleString 函数,而且我无法找到答案来回答这个问题。

【问题讨论】:

  • Python-C-API 中没有PyRun_FromString 函数。你的意思是PyRun_SimpleString?为什么你不能使用它?这是在 C 中执行 Python 的一种可能方式。
  • 啊是的,我更正了。 PyRun_SimpleString 的问题在于它似乎没有将变量作为参数......

标签: python c embedding


【解决方案1】:

正如评论中提到的,没有Pyrun_SimpleStringhere 介绍了如何从 C 中执行 Python 函数。一种方法:

  1. 使用Py_CompileString 编译您的脚本
  2. 为全局/本地创建字典。
  3. 使用PyDict_GetItemString(name)从全局字典中提取函数
  4. 使用PyArg_ParseTuple 构建您的参数元组
  5. 使用PyObject_CallFunction 执行您的函数对象。

【讨论】:

  • 感谢您的回答让我能够做我想做的事
【解决方案2】:

看看Weave,它允许你在Python代码中直接包含C代码。

【讨论】:

  • 谢谢,但我想做相反的事情:在 C 中调用 python ^^
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多