Я ищу способы записать данные в существующий процесс STDIN
из внешних процессов и нашел аналогичный вопрос Как вы передаете данные в STDIN программы из разных локальные/удаленные процессы в Python? в stackoverlow.
В этой теме @Michael говорит, что мы можем получить файловые дескрипторы существующего процесса на пути, как показано ниже, и разрешить записывать в них данные в Linux.
/proc/$PID/fd/
Итак, я создал простой script, указанный ниже, чтобы проверить запись данных в script STDIN
(и TTY
) из внешнего процесса.
#!/usr/bin/env python
import os, sys
def get_ttyname():
for f in sys.stdin, sys.stdout, sys.stderr:
if f.isatty():
return os.ttyname(f.fileno())
return None
if __name__ == "__main__":
print("Try commands below")
print("$ echo 'foobar' > {0}".format(get_ttyname()))
print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))
print("read :: [" + sys.stdin.readline() + "]")
В этом тесте script показаны пути STDIN
и TTY
, а затем подождите, пока он не напишет STDIN
.
Я запустил этот script и получил сообщения ниже.
Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
Итак, я выполнил команду echo 'foobar' > /dev/pts/6
и echo 'foobar' > /proc/3308/fd/0
с другого терминала. После выполнения обеих команд на терминале дважды отображается сообщение foobar
, на котором запущен тест script, но все. Строка print("read :: [" + sys.stdin.readline() + "]")
не была выполнена.
Есть ли способ записать данные из внешних процессов в существующий процесс STDIN
(или другие файловые дескрипторы), т.е. вызвать выполнение строки print("read :: [" + sys.stdin.readline() + "]")
из других процессов?