嵌入在c中的Python.正在调用pyrun_simplestring同步

Python embedded in c . Is calling PyRun_SimpleString synchronous?

本文关键字:pyrun simplestring 调用 同步 Python 中的      更新时间:2023-10-16

应用程序的目的是将句子中存在的单词的引理转换为俄语。我正在为SDICT格式化的词汇提供帮助,该词汇由C 程序称为Python脚本。

我的目的是获取以下输出:

展览/展览:: 1国会/国会:: 2组织者/组织者:: 3哪个/哪个:: 4是/出现:: 5 rao/none :: 6 eec/none :: 7俄罗斯/none :: :8 EESR/ :: 9 Oil/Oil :: 10 Company/Company :: 11 Yukos/none :: 12 Yukos/none :: 13 and/and :: 14 Administration/Administration/Administration :::: 15 tomsk/none :: 16区域/区域:: 17将持续:: 18四/四:: 19天/天:: 20

以下代码对该句子进行了操作,但是第二句话是错误的,因此我遇到了错误的输出:

egor/ none :: 1 gaidar/none :: 2 headed/none :: 3 first/head/head :: 4俄罗斯/第一个:: 5政府/无:: 6 :7 pall/wher :: 8政府/呼叫:: 9 Kamikadze/groumpmaty :: 10

注意: NONE用于缺少翻译的单词。

我正在运行以下C 代码摘录,该摘录实际上称为PyRun_SimpleString

for (unsigned int i = 0; i < theSentenceRows->size(); i++){
  stringstream ss;
  ss << (i + 1);
  parsedFormattedOutput << theSentenceRows->at(i)[FORMINDEX] << "/";
  getline(lemmaOutFileForTranslation, lemma);
  PyObject *main_module, *main_dict;
  PyObject *toTranslate_obj, *translation, *emptyString;
  /* Setup the __main__ module for us to use */
  main_module = PyImport_ImportModule("__main__");
  main_dict   = PyModule_GetDict(main_module);
  /* Inject a variable into __main__, in this case toTranslate */
  toTranslate_obj = PyString_FromString(lemma.c_str());
  PyDict_SetItemString(main_dict, "start_word", toTranslate_obj);
  /* Run the code snippet above in the current environment */
  PyRun_SimpleString(pycode);
  **usleep(2);**
  translation = PyDict_GetItemString(main_dict, "translation");
  Py_XDECREF(toTranslate_obj);
  /* writing results */
  parsedFormattedOutput << PyString_AsString(translation) << "::" << ss.str() << " ";

哪些pycode定义为:

const char *pycode =
    "import sysn"
    "import ren"
    "import sdictviewer.formats.dct.sdict as sdictn"
    "import sdictviewer.dictutiln"
    "dictionary = sdict.SDictionary( 'rus_eng_full2.dct' )n"
    "dictionary.load()n"
    "translation = "*NONE*"n"
    "p = re.compile('( )([a-z]+)(.*?)( )')n"
    "for item in dictionary.get_word_list_iter(start_word):n"
    "        try:n"
    "            if start_word == str(item):n"
    "                instance, definition = item.read_articles()[0]n"
    "                translation = p.findall(definition)[0][1]n"
    "        except:n"
    "            continuen";

我在第二句话的输出中没有延迟一些延迟,所以我添加了usleep(2);在认为发生这种情况的同时,PyRun_SimpleString是不同步的。但是,这无济于事,我不确定这是原因。延迟错误发生在跟随和增加的句子中。

那么,呼叫PyRun_SimpleString同步吗?也许,在C 和Python之间共享可变值不对吗?比你在爱情中。

根据文档,它是同步的。

我建议您测试与C 代码的Python代码SAWATATELHI,这将使调试变得更加容易。一种方法是将代码粘贴在交互式解释器中,并逐行执行IT。在调试时,我将第二次温斯顿·埃沃特(Winston Ewert)的评论不丢弃例外。

相关文章:
  • 没有找到相关文章