Когда вы передаете что-то процессу, канал подключается к стандартному входу этого процесса.Это означает, что ваш терминал ввода не будет подключен к редактору.Большинство редакторов также проверяют, является ли их стандартный ввод терминалом ( isatty ), а не каналом;и если это не терминал, они откажутся начинать.В случае nano
это, по-видимому, приводит к его завершению с сообщением, которое вы включили:
% echo | nano
Received SIGHUP or SIGTERM
Вам нужно будет предоставить входные данные для вашего сценария Python другим способом, например, черезфайл, если вы хотите иметь возможность передавать его стандартный ввод в редактор на основе терминала.
Теперь вы уточнили свой вопрос, что вы не хотите, чтобы процесс Python stdin
был присоединен к редактору.Вы можете изменить свой код следующим образом:
editorprocess = subprocess.Popen([editor or "vi", temppath],
stdin=open('/dev/tty', 'r'))