嵌入在c中的Python.正在调用pyrun_simplestring同步
Python embedded in c . Is calling PyRun_SimpleString synchronous?
应用程序的目的是将句子中存在的单词的引理转换为俄语。我正在为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)的评论不丢弃例外。
- 没有找到相关文章