簡體   English   中英

規范的嵌入式交互式 Python 解釋器示例?

[英]Canonical embedded interactive Python interpreter example?

我想在我的 C/C++ 應用程序中創建一個嵌入式 Python 解釋器。 理想情況下,這個解釋器的行為與真正的 Python 解釋器完全一樣,但在處理每一行輸入后產生。 標准的 Python 模塊code從外面看起來和我想要的完全一樣,只是它是用 Python 編寫的。 例如:

>>> import code
>>> code.interact()
Python 2.7.1 (r271:86832, Jan  3 2011, 15:34:27) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

code的核心是接受可能不完整的用戶輸入並顯示語法錯誤(情況 1)、等待更多輸入(情況 2)或執行用戶輸入(情況 3)的函數。

try:
    code = self.compile(source, filename, symbol)
except (OverflowError, SyntaxError, ValueError):
    # Case 1
    self.showsyntaxerror(filename)
    return False

if code is None:
    # Case 2
    return True

# Case 3
self.runcode(code)
return False

Python 源代碼樹Demo/embed/demo.c中的Demo/embed/demo.c是外殼,但不是我想要的,因為該示例只處理完整的語句。 我在這里包括其中的一部分以供參考:

/* Example of embedding Python in another program */
#include "Python.h"

main(int argc, char **argv)
{
    /* Initialize the Python interpreter.  Required. */
    Py_Initialize();
    [snip]
    /* Execute some Python statements (in module __main__) */
    PyRun_SimpleString("import sys\n");
    [snip]
    /* Exit, cleaning up the interpreter */
    Py_Exit(0);
}

我正在尋找的是處理不完整塊、堆棧跟蹤等的 C 代碼。也就是說,真正的 Python 解釋器的所有行為。 提前致謝。

看看boost.python 這是 Python 與 C++ 的絕妙整合,反之亦然。

但是無論如何您都可以使用 C API。 PyRun_InteractiveLoopF​​lags()函數在您的 C++ 應用程序中提供了一個交互式控制台。

看看我在C ++中實現的python解釋器。 它不完全是“規范”,因為它使用Qt工具包和boost.python,因為它僅用於這個應用程序。 但我認為你會發現它包含一些你可以在你的程序中使用的有用的小塊。

https://svn.janelia.org/penglab/projects/vaa3d/trunk/experimental/brunsc/python_console/PythonInterpreter.h

https://svn.janelia.org/penglab/projects/vaa3d/trunk/experimental/brunsc/python_console/PythonInterpreter.cpp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM