Обманывать программу Windows, заставляя ее думать, что она работает с не перенаправленным выводом

Можно ли обмануть программу Windows (используя сценарий python или любую другую оболочку для ее запуска), полагая, что ее вывод не перенаправляется, поэтому вывод не буферизуется?

(Ну, это аналогичный вопрос, например, принуждение программы к очистить стандартный вывод при перенаправлении, за исключением того, что он специфичен для Windows, вопрос касается только linux)


person Jean-François Fabre    schedule 27.09.2017    source источник
comment
isatty () - это вызов очень низкого уровня. Исправление функции Winapi GetFileType другой программой возможно только теоретически.   -  person Hans Passant    schedule 27.09.2017
comment
@HansPassant, вы хотите подключить GetFileType, чтобы проверить, запрашивает ли он стандартный дескриптор, и в этом случае всегда возвращать FILE_TYPE_CHAR?   -  person Eryk Sun    schedule 27.09.2017
comment
Я думаю, что нашел какой-то эквивалент unbuffer программы для Windows, мне нужно его протестировать (требуется MSYS2): stackoverflow.com/questions/11516258/   -  person Jean-François Fabre    schedule 27.09.2017
comment
@ Jean-FrançoisFabre, это интересно, но на самом деле это не обман программы, в отличие от Linux stdbuf. Это действительно с помощью консоли. Раньше я использовал буферы экрана консоли с дочерними процессами, но только в простом случае, когда я могу использовать большой экран с 9 999 строками и не беспокоиться о прокрутке. Буфер экрана не похож на канал, который блокируется при заполнении, поэтому winpty должен его опросить. Интересно, насколько это надежно. Другие программы, такие как ConEmu, используют внедрение DLL для подключения WriteFile и WriteConsole к целевому процессу.   -  person Eryk Sun    schedule 27.09.2017
comment
Я бы посоветовал попробовать com0com или что-то подобное, должно работать без очистки экранных буферов или инъекции в целевой процесс. Хотя я на самом деле не пробовал.   -  person Harry Johnston    schedule 28.09.2017