How can I get the error message if py::exec an incorrect statement? #3596
Unanswered
softempire
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Hi there,
Does anyone meet the issue before?
I want to get the output/error when exec some Python statement from a C++ program. And then display the message on the GUI. But I can't get the message if the python statement is incorrect like "jajslkjgkajljslkjglakj"
`int main(int argc, char *argv[])
{
py::scoped_interpreter guard{}; // start the interpreter and keep it alive
class CatchOutErr:\n
def init(self):\n
self.value = 'placeholder'\n
def write(self, txt):\n
self.value += txt\n
catchOutErr = CatchOutErr()\n
oldstdout = sys.stdout\n
sys.stdout = catchOutErr\n
oldstderr = sys.stderr\n
sys.stderr = catchOutErr\n
"; //this is python code to redirect stdouts/stderr
//I can get the result message "placeholder123"
py::exec("print(123)");
//I can 't get the error message if run the following statement
//py::exec("error print(123)");
}
catch (...)
{
auto catcher = PyObject_GetAttrString(pModule, "catchOutErr"); //get our catchOutErr created above
auto output = PyObject_GetAttrString(catcher, "value"); //get the stdout and stderr from our catchOutErr object
auto strOutput = ObjectToString(output);
}
}`
Beta Was this translation helpful? Give feedback.
All reactions