Найти - Пользователи
Полная версия: KeyboardInterrupt
Начало » Python для новичков » KeyboardInterrupt
1
avdoshkin
Есть меню для управления:
когда я вызываю в меню i запускается два скрипта один на perl другой на bash, когда вызывается башесвкий скрипт
мне иногда нужно нажать CTRL+C что бы в башевском скрипте перейти на другой уровень выполнения процедуры, питоновская менюшка перехватывает CTRL+C и переходит в главное меню и потом выходит остальной результат когда я нажимал CTRL+C.
А необходимо когда я нажимаю CTRL+C допустим два или три раза питоновская менюшка не реагировала на CTRL+C а дала выполнить CTRL+C башовскому скрипту.
User ping
PING 10.3.4.23 (10.3.4.23) 56(84) bytes of data.
^C
— 10.3.4.23 ping statistics —
2 packets transmitted, 0 received, 100% packet loss, time 999ms

arp ping
ARPING 10.3.4.23 from 10.3.4.254 vlan340
^CSent 2 probes (2 broadcast(s))
Received 0 response(s)
и т.д.

def ch_i():
try:
subprocess.call('sudo perl /home/bin/admin/bin/infoip %s' %os.environ["USER"], shell=True)
except KeyboardInterrupt:
pass
except KeyboardInterrupt:
pass
except KeyboardInterrupt:
pass


while True:
os.system("clear")
print"""
\t\t\tSiNT Administrator MENU SELECT:'

\tChange client's IP [3]
\tView info user [i]
\tQuit or Exit [q]
"""

menu_option = raw_input("\t\t>")
os.system("clear")

if menu_option == '3':
subprocess.call('sudo python /home/bin/py_scripts/cons_menu/choice_3.py', shell=True)
if menu_option == 'i':
ch_i()
if menu_option == 'q':
break
goblin_maks
используй signal
    try:
subprocess.call('sudo perl /home/bin/admin/bin/infoip %s' %os.environ["USER"], shell=True)
except KeyboardInterrupt:
pass
except KeyboardInterrupt:
pass
except KeyboardInterrupt:
pass
что это дало ?
avdoshkin
goblin_maks
используй signal
    try:
subprocess.call('sudo perl /home/bin/admin/bin/infoip %s' %os.environ["USER"], shell=True)
except KeyboardInterrupt:
pass
except KeyboardInterrupt:
pass
except KeyboardInterrupt:
pass
что это дало ?
Почитал про сигналы переписал код:
def signal_handler(signal,frame):
pass
....
def tt():
signal.signal(signal.SIGINT, signal_handler)
try:
res = subprocess.call('sudo perl /root/infoip %s' %os.environ["USER"], shell=True)
except BaseException:
pass
while 1:
continue
tt()
Получил что хотел, при посылке SIGINT продолжает выполнять другой скрипт, но нужно как-то выйти из него нажатием “Press key Enter”.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB