Мне нужно сделать две программы (например, «сценарий A» (.py) и «script B» (.exe)). Обе программы находятся в бесконечном цикле: Script A нужно записать в stdin скрипта B, а затем читать stdout скрипта B после этого писать снова и т. Д. Script B Я не могу изменить.Выполнение двух сценариев связи
Оба файла находятся на моем жестком диске, поэтому я должен найти лучший способ решить эту проблему, нежели создавать сети. Я могу, однако, написать файлы со сценарием A. Это не домашнее задание курса, я пишу графический интерфейс для игры, и у меня есть несколько запрограммированных AI. Я думал о трубопроводе (python scripta.py | scriptb.exe), но, похоже, для завершения скрипта B должен выполняться сценарий A. Опять же, поскольку я никогда не использовал трубопровод, я мог бы пропустить что-то очевидное.
Я бы предпочел, чтобы необходимые инструменты были частью стандартной библиотеки, но если они не слишком плохи.
Решение должно работать как на Linux, так и на Windows. Может ли кто-нибудь из вас указать мне в правильном направлении? Спасибо за ваше время.
Вы должны использовать 'print prog.communicate ('Это перейдет к скрипту A') [0]', а не напрямую использовать prog.stdin и prog.stdout - прочитайте в документации по модулю модуля 'subprocess' предупреждение о том, что вы не используете stdin и stdout напрямую. –
@ Крис прав, если дочерний процесс генерирует значительный объем вывода. –
@ Zach: «Предупреждение: используйте' общаться() ', а не' .stdin.write', '.stdout.read' или' .stderr.read', чтобы избежать взаимоблокировок из-за заполнения любого из других буферов буферов OS блокируя дочерний процесс ». Я бы подумал, что лучше всего использовать «общаться» абсолютно всегда; Я не использовал его с чем-то большим, чем несколько сотен байт, но я использую 'communication', и он работает хорошо - есть ли причина, по которой вы использовали' .stdin.write' и '.stdout.read' напрямую? –