首先是一个简短的背景:
(1)在Python3.6中运行此程序时,我需要等到它结束后才能显示结果:
import time
for i in range(5):
print(i, end=" ")
time.sleep(1)
(2)另一方面,该程序按照我的要求运行,每秒钟打印一次值:
import time
import functools
print = functools.partial(print, flush=True)
for i in range(5):
print(i, end=" ")
time.sleep(1)
现在我的问题是:
我怎样才能补充呢
import functools
print = functools.partial(print, flush=True)
在C代码中,这样我就可以使用PyRun_文件运行程序1,但结果是否与运行程序2一样
我很难找到简单易懂的文档和示例,所以我希望能得到一些帮助
这就是我尝试过的(省略了错误检查,并且我试图改进的程序中已有的旧代码被标记为“//existing”):
Py_Initialize(); //existing
PyObject* functools = PyImport_ImportModule("functools");
PyObject* partial = PyObject_GetAttrString(functools, "partial");
PyObject* builtins = PyImport_ImportModule("builtins");
PyObject* print = PyObject_GetAttrString(builtins, "print");
PyObject* args = PyTuple_New(1);
PyTuple_SetItem(args, 0, print);
PyObject* kwargs = PyDict_New();
PyDict_SetItemString(kwargs, "flush", Py_True);
PyObject_Call(partial, args, kwargs);
PyObject* main_module = PyImport_ImportModule("__main__"); //existing
PyObject* pdict = PyModule_GetDict(main_module); //existing
FILE* fp = fopen("prg_1.py", "r"); //existing
PyObject* pval = PyRun_File(fp, "prg_1.py", Py_file_input, pdict, pdict); //existing
Py_Finalize(); //existing
不幸的是,这并不像我希望的那样有效,所以有人能发现任何明显的错误,或者可能不是很明显的错误吗
提前感谢您的帮助
多亏了DavidW的宝贵意见,它现在可以工作了!谢谢大家!
(我确实遇到了另一个问题,我将在一个新问题中解决。)
添加代码后,代码现在看起来如下所示(错误检查仍被省略):
相关问题 更多 >
编程相关推荐