【发布时间】:2011-05-16 19:50:00
【问题描述】:
感谢你们两位的快速回复 :) 我想我理解你的建议,但这并不是我所需要的。老实说,我不知道什么是做我需要的正确技术。
我有一个程序,它在运行期间有时需要调用 python 来执行一些任务。我需要一个调用 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")
我的问题是捕获 给定命令的所有 python 输出(pythonInput)。我尝试的第一件事是使用此脚本将 python 的 sdtout 和 stderr 重定向到一个文件:
#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'")
输出为空 ....
亚历克斯
【问题讨论】:
-
我不明白。你 eval - "5*5+9" 存储在 boostOutputStr 中,当然值是 34 并且你做 cout
-
请注意,当您有选择时,嵌入 Python 通常不是最佳设计。 twistedmatrix.com/users/glyph/rant/extendit.html