В моей программе на Python 3 я в какой-то момент открываю сеанс экрана GNU. После закрытия этого сеанса вывод
[screen is terminating]
печатается в окружающем сеансе (терминал, на котором запущена программа python). Как мне предотвратить это?
Я сейчас использую что-то вроде
import subprocess
subprocess.run('screen',stdout=subprocess.PIPE,stderr=subprocess.PIPE)
Обычно [stdout,stderr]=subprocess.PIPE
захватывает вывод и выдает ошибку (например, для run('echo hello',stdout=subprocess.PIPE)
ничего не печатается), но по какой-то причине это не работает с screen
.
Вам следует захватить stderr
, а также stdout
, если вы не хотите, чтобы на консоли что-либо было напечатано.
Screen
также может определять, что stdin
является терминалом, и использовать его для ввода-вывода. Я не знаю, решит ли проблему трубка или /dev/null
. Попробуйте и посмотрите, работает ли это.
Screen
, скорее всего, для работы требуется доступ к устройству tty
. Вы можете создать для него tty (открыв /dev/ptmx
и предоставив screen
соответствующий файл /dev/pts/N
), но это отнюдь не тривиально.
Я считаю, что ты прав. Когда я меняю
stdin
, я получаю контентstdout
, а именно: «Экран должен быть подключен к temrinal» (или что-то в этом роде). Я считаю, что то, что вы предлагаете, для меня слишком сложно. У меня есть другое решение: просто удалите то, что было написано с помощью'\b', '\033[F', '\033[K'
. К сожалению,screen
не всегда заканчивается одним и тем же выводом на терминал, знаете ли вы, как узнать, какой экран выводит на терминал?