謝謝你的快速回復:) 我想我明白你的建議,但它不完全是我所需要的。說實話,我不知道什麼是正確的技術來做我所需要的。在C++中嵌入Python - 從C++程序運行Python
我有一個程序,它在運行過程中有時需要調用python來執行一些任務。我需要一個函數,調用蟒蛇和捕捉蟒蛇標準輸出
pythonCallBackFunc(const char* pythonInput)
此功能是這樣做的功能。
例如:
pythonCallBackFunc("5**2") needs to print on stdin(or some other file):
PythonResult: 25
pythonCallBackFunc("print 5**2") needs to print on stdin(or some other file):
PythonResult: 25
pythonCallBackFunc("'a'+'b'") needs to print on stdin(or some other file):
PythonResult: 'ab'
pythonCallBackFunc("print 'a'+'b'") needs to print on stdin(or some other file):
PythonResult: ab
pythonCallBackFunc("execfile('temp.py')")
it should print nothing but is needs to run the temp.py script
the next 2 calls need to print the value of result, meaning 4.
pythonCallBackFunc("result = 4")
pythonCallBackFunc("print result")
我的問題是捕捉所有給定命令(pythonInput)蟒輸出。我試過的第一件事是使用這個腳本python的sdtout和標準錯誤重定向到一個文件:
#stdout.py
import sys
saveout = sys.stdout
fsock = open('out.log', 'w')
sys.stdout = fsock
#stdout_close.py
sys.stdout = saveout
fsock.close()
#stdout_close.py
fsock = open('error.log', 'w')
sys.stderr = fsock
和重定向後,我用的功能Py_run_SimpleString
也沒關係,但是這個功能被忽略這種類型的命令:
Py_run_SimpleString("'a'+'b'")
輸出是空....
亞歷
我不明白。你評價 - 「5 * 5 + 9」存儲在boostOutputStr中,當然值是34,你做cout <<「Python:」<< boostOutputStr。 – pyfunc 2010-11-28 10:19:48
請注意,如果您有選擇,嵌入Python通常是次優設計。 http://twistedmatrix.com/users/glyph/rant/extendit.html – 2010-11-28 16:59:16