gpt4 book ai didi

python - 将嵌入式 Python IO 重定向到使用 AllocConsole Win32 应用程序创建的控制台

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:41 24 4
gpt4 key购买 nike

我知道有类似的问题,但我解决这个问题的努力没有成功。我想重定向Python解释器I/O,但我只成功重定向了stdout。我对 stdin 和 stderr 仍然有问题。基于Redirect Embedded Python IO to a console created with AllocConsole我已经这样做了:

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

我希望得到任何帮助,它需要使用 Python C API 来解决。谢谢。

最佳答案

我通过改变一些东西并使用 Python 3.x 而不是 2.x 找到了解决方案。现在,如果我们根据 Python 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);

关于python - 将嵌入式 Python IO 重定向到使用 AllocConsole Win32 应用程序创建的控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com