Я хотел бы иметь возможность порождать процесс в Python и иметь двухстороннюю связь. Конечно, Pexpect делает это, и это действительно мой путь. Тем не менее, это не совсем идеально.
Моя идеальная ситуация состояла бы в том, чтобы иметь кроссплатформенную общую технику, включающую только стандартные библиотеки python. Подпроцесс довольно близок, но тот факт, что мне приходится ждать завершения процесса, прежде чем безопасно взаимодействовать с ним, нежелателен.
Глядя на документацию, он говорит, что есть дескрипторы файлов stdin, stdout и stderr, которыми я могу напрямую манипулировать, но есть большое жирное предупреждение с надписью «Не делай этого». К сожалению, не совсем понятно, почему существует это предупреждение, но из того, что я понял из google, это то, что оно связано с буферизацией os, и можно написать код, который неожиданно блокируется при сбое этих внутренних буферов (как примечание, любые примеры показать неправильный путь и правильный путь будет оценен).
Итак, рискуя моим кодом из-за потенциальных тупиков, я подумал, что было бы интересно использовать опрос или выбрать интерактивное чтение из запущенного процесса, не убивая его. Хотя я теряю (я думаю) кроссплатформенную способность, мне нравится тот факт, что она не требует дополнительных библиотек. Но что еще более важно, я хотел бы знать, является ли это хорошей идеей. Я еще не попробовал этот подход, но я обеспокоен ошибками, которые потенциально могут разрушить мою программу. Это может работать? Что я должен проверить?
В моем конкретном случае я не очень беспокоюсь о возможности записи в процесс, просто повторяю чтение из него. Кроме того, я не ожидаю, что мои процессы будут выводить огромные объемы текста, поэтому я надеюсь избежать проблемы взаимоблокировки, однако я бы хотел точно знать, каковы эти ограничения, и иметь возможность написать несколько тестов, чтобы увидеть, где они выходят из строя.