2016-07-31 5 views
0

비슷한 질문이 있지만이 문제를 해결하기위한 노력이 성공적이지 못했습니다. 파이썬 인터프리터 I/O를 리다이렉트하고 싶지만, stdout을 리다이렉션하는데 성공했다. stdin과 stderr에는 여전히 문제가 있습니다. Redirect Embedded Python IO to a console created with AllocConsole을 바탕으로 내가이 짓을 :AllocConsole Win32 응용 프로그램으로 만든 콘솔에 임베디드 Python IO 리디렉션

PyObject* sys = PyImport_ImportModule("sys"); 
PyObject* pystdout = PyFile_FromString("CONOUT$", "wt"); 
if (-1 == PyObject_SetAttrString(sys, "stdout", pystdout)) { 
    /* raise errors and wail very loud */ 
} 
PyObject* pystdin = PyFile_FromString("CONIN$", "rb"); 
if (-1 == PyObject_SetAttrString(sys, "stdin", pystdin)) { 
    /* raise errors and wail very loud */ 
} 
//cout << "no error" << endl; 
Py_DECREF(sys); 
Py_DECREF(pystdout); 
Py_DECREF(pystdin); 

을 그리고 테스트 목적을 위해 간단한 스크립트가 있습니다

내 스크립트는 첫 번째 인쇄를 실행
print 'Hello' 
guess = int(raw_input('Take a guess: ')) 
print quess 

콘솔에 쇼입니다. 두 번째 및 세 번째 명령은 전혀 표시되지 않습니다. 그래서, 대신 출력 :

Hello 
Take a guess: "my guess" 
"my guess" 

난 단지

Hello 

내가 어떤 도움을 주셔서 감사합니다 것 가지고 파이썬 C API를 사용하여 해결 될 필요가있다. 감사합니다. .

답변

0

나는 몇 가지 사항을 바꾸고 2.x 대신 Python 3.x를 사용하여 해결책을 찾았습니다. 파이썬 3.x 표준에 따라 스크립트를 조금 수정하면 모든 것이 잘 작동합니다.

PyObject* sys = PyImport_ImportModule("sys"); 
if (sys == NULL) 
{ 
    /*show error*/ 
} 
PyObject* io = PyImport_ImportModule("io"); 
PyObject* pystdout = PyObject_CallMethod(io, "open", "ss", "CONOUT$", "w"); 
if (pystdout == NULL) 
{ 
    /*show error*/ 
} 
if (-1 == PyObject_SetAttrString(sys, "stdout", pystdout)) 
{ 
    /*show error*/ 
} 
PyObject* pystdin = PyObject_CallMethod(io, "open", "ss", "CONIN$", "r"); 
if (pystdin == NULL) 
{ 
    /*show error*/ 
} 
if (-1 == PyObject_SetAttrString(sys, "stdin", pystdin)) 
{ 
    /*show error*/ 
} 
PyObject* pystderr = PyObject_CallMethod(io, "open", "ss", "CONOUT$", "w"); 
if (pystderr == NULL) 
{ 
    /*show error*/ 
} 
if (-1 == PyObject_SetAttrString(sys, "stderr", pystderr)) 
{ 
    /*show error*/ 
} 
Py_DECREF(io); 
Py_DECREF(sys); 
Py_DECREF(pystdout); 
Py_DECREF(pystdin);