Терминальная команда, заканчивающая скрипт - PullRequest
0 голосов
/ 11 сентября 2018

Интересно, как бы я закодировал в скрипт, чтобы, если пользователь введет команду, он завершил процесс этого скрипта.Например, я запускаю scriptname.py и кодирую его там, чтобы при вводе terminalcommand в терминал он закрывал этот скрипт.

Это также принудительно закроет скрипт?Или он все еще пробежал код, а затем закрыл его.У меня есть это прямо сейчас, так что, когда я нажимаю q, он закрывает программу, пройдя через код, но я хочу быть в состоянии сделать это в терминале.

cv2.imshow("Diff", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
   break 

В настоящее время у меня есть такой код, поэтому, когда я нажимаю q, это завершает задачу.

Спасибо.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы должны сделать внешний ввод для вашего кода.Одним из простых способов для этого является использование именованного канала (при условии, что вы работаете в ОС 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...