Получить ввод из подчинённого псевдотерминала

Запустив команду, что выводит приглашение на ввод и запрашивает данные, нужно перенаправить всё это действо в другой pts. Пока получилось перенаправить туда только stdout и stderr (или нет, выводится приглашение ввода данных) python bin/src/translate.py 2> /dev/pts/2 > /dev/pts/2


Ответы (1 шт):

Автор решения: eri

вызова os.setsid() не хватает для того чтоб передать скрипт в другую консоль...

Через pty/pts

В шеле есть команда setsid, попробуйте запуститься через неё

socat -d -d pty,raw,echo=0 pty,raw,echo=0 & # не знаю как вы подняли pts, сокат для примера
cat < /dev/pts/11 & # второй терминал

setsid python -c "print(input())" < /dev/pts/12 > /dev/pts/12
echo 12223 > /dev/pts/11 # второй терминал

И ответ притетел обратно

Терминалы должны быть не занятыми даже bash-ем, поэтому создаю новые сокатом.

Через fifo решение лучше

mkfifo /tmp/py-term
mkfifo /tmp/term-py

python -c "print(input().upper())" > /tmp/py-term < /tmp/term-py

на втором терминале почему-то не сработало (может кто подскажет где косяк)

cat < /tmp/py-term > /tmp/term-py

а вот так пашет

cat < /tmp/py-term &
echo asd > /tmp/term-py

Через screen ещё лучше

Не надо думать о перенаправлении - всё работает из коробки. На первом терминале

screen python -c "print(input().upper())"

потом кнопками ctrl+a ctrl+d или без кнопок и чтоб было видно завершение

screen -dmS pysession sh -c 'python -c "print(input().upper())"; read'

на втором терминале

screen -rS pysession
→ Ссылка