Вы должны сделать внешний ввод для вашего кода.Одним из простых способов для этого является использование именованного канала (при условии, что вы работаете в ОС Linux).Создайте именованный файл, используя
mkfifo mypipe
Теперь в python вы можете открыть именованный канал
import os
pipe = os.fdopen(os.open('mypipe', os.O_RDONLY | os.O_NONBLOCK))
. Вы можете игнорировать флаг O_NONBLOCK
, если в вашем коде больше ничего нетделать, пока вы ждете ввода.Затем он будет ждать, пока что-то будет записано в канал.
Так что теперь для ожидания вы можете использовать цикл while, чтобы проверить, получил ли ваш канал желаемую команду.
while pipe.read().rstrip() != "terminalcommand":
#something to do while waiting. time.sleep() maybe? Or just pass
Если вы не знаете, как ведут себя именованные каналы, вы можете записать в них что-нибудь, как обычный файл.Поскольку теперь код ожидает terminalcommand
, вы можете сделать
echo terminalcommand > mypipe
в терминале, чтобы выйти из цикла while.Если вы хотите иметь одну команду, создайте псевдоним в терминале.
alias stopmyprogram="echo terminalcommand > [directory to mypipe]/mypipe"
Вы можете сделать псевдоним глобально доступным, добавив эту строку в файл ~/.bash_aliases