将数据定向到标准intpu的Python子进程

2024-10-05 13:21:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Windows上有一个C++程序,从标准输入中读取字符。我想编写一个Python脚本,打开这个C++程序,然后让脚本写入程序标准输入。在

我可以成功地用Python创建子进程并从标准输出中读取。但是,程序无法通过Python脚本从standard中接收任何内容。该程序使用ReadConsole()从中的标准中读取,即使GetStdHandle()返回时没有错误,它也会重复返回错误代码6(无效句柄)。在

以下是程序代码:

char buffer[GIDE_BUFFER_SIZE];
HANDLE hConsole_c = GetStdHandle(STD_INPUT_HANDLE);
DWORD chars_read = 0;

if(hConsole_c == INVALID_HANDLE_VALUE )
    {
    gide_printf(LOG_ERR,"ERROR: INVALID_HANDLE_VALUE for stdout: %d.", GetLastError());
    fflush(stdout);
    keyboard_handler_running = false;
    main_thread_running = false;
    }
else if( hConsole_c == NULL)
    {
    gide_printf(LOG_ERR,"ERROR: Unable to get handle to standard output.");
    fflush(stdout);
    keyboard_handler_running = false;
    main_thread_running = false;
    }

gide_printf(LOG_DEBUG,"keyboard_listener thread started.");

Sleep(500); //sleep to give time for everything to come up.
print_menu();
memset(buffer, 0, sizeof(buffer));

//reads characters from console after enter is pressed.
//enter key adds CR and a LF so it adds two chars to all output.
while(keyboard_handler_running)
    {
    if( ReadConsole( hConsole_c, buffer, sizeof(buffer), &chars_read, NULL ) == 0)
        {
        gide_printf(LOG_ERR,"ERROR: Reading from console failed: %d.", GetLastError());
        ErrorHandler("blah");
        continue;
        }
    gide_printf(LOG_DEBUG,"Read %d chars from console.", chars_read);
.
.
.
.

下面是Python脚本:

^{pr2}$

MSDN提到了以下内容:虽然ReadConsole只能与控制台输入缓冲区句柄一起使用,但是ReadFile可以与其他句柄(如文件或管道)一起使用。如果将ReadConsole与已重定向为非控制台句柄的标准句柄一起使用,则ReadConsole将失败。http://msdn.microsoft.com/en-us/library/windows/desktop/ms684958%28v=vs.85%29.aspx

我想知道这是否与此有关。在

如果有人对如何做这件事有什么建议,或者对Python有更好的处理方法,请告诉我。在

谢谢。在


Tags: to程序脚本log标准buffer句柄running
1条回答
网友
1楼 · 发布于 2024-10-05 13:21:30

我想出了一个解决办法,让我对问题的本质有了一些了解。我在visualstudio中使用Windows控制台项目。我创建了一个新的“空白项目”,而不是使用RealCOUNSORE()的Windows API,我使用了STD的C++ API:cin.getline公司(). 这就解决了问题。在

同样,这并不是一个解决方案,而是一个变通办法。但它表明问题似乎与windowsapi或visualstudio项目设置有关。在

相关问题 更多 >

    热门问题