Ctrl+\
का उल्लेख किया गया है जो आपके टर्मिनल सॉफ़्टवेयर द्वारा व्याख्या किया गया है, और कुंजी बाइंडिंग stty
के माध्यम से कॉन्फ़िगर किया गया है। जब तक कि आपके टर्मिनल सॉफ़्टवेयर को कस्टमाइज़ करने का कोई तरीका न हो, आप केवल कुछ सिग्नल का उपयोग कर सकेंगे जो पहले से ही बनाए गए हैं।
इस पर निर्भर करता है कि आपको कितनी कार्यक्षमता चाहिए या आप इसे कितना लेना चाहते हैं, दूसरा विकल्प है अपना खुद का सरल "प्रक्रिया निष्पादन टर्मिनल" लिखने के लिए। यह एक ऐसी स्क्रिप्ट होगी जो आपके लिए एक ऐप निष्पादित करेगी और आपके टर्मिनल को कच्चे मोड में रखेगी ताकि वह कीस्ट्रोक को संसाधित कर सके जो कस्टम क्रियाएं करता है।
नीचे एक विस्तृत उदाहरण है जो दिखा रहा है कि मेरा क्या मतलब है। यदि आप चाहें तो curses या urwid के माध्यम से आप कुछ भी ऐसा कर सकते हैं।
प्रक्रिया उत्पादन को संभालने के लिए आप की stdout/stderr
पर कब्जा और स्क्रीन के लिए अच्छी तरह से यह प्रदर्शित करते हैं, का उपयोग कर यदि आप आदि मैन्युअल टर्मिनल से छेड़छाड़, या एक स्क्रॉल विंडो में उत्पादन प्रदर्शित करने के लिए एक urwid विजेट का उपयोग कर रहे हैं, नहीं करनी होंगी एक ही विचार अन्य जीयूआई सिस्टम (डब्ल्यूएक्स, टिंकर, आदि) तक भी विस्तारित होगा लेकिन टर्मिनल नियंत्रण का उल्लेख किया गया था।
import signal, sys, time
def handler(num, _):
print 'got:', sigmap.get(num, '<other>')
if num == signal.SIGINT:
sys.exit(1)
return 1
signames = ['SIGINT','SIGHUP','SIGQUIT','SIGUSR1']
sigmap = dict((getattr(signal, k), k) for k in signames)
for name in signames:
signal.signal(getattr(signal, name), handler)
while 1:
time.sleep(1)
प्रयोग उदाहरण:
import os, signal, subprocess, sys, tty, termios
sigmap = {
'\x15': signal.SIGUSR1, # ctrl-u
'\x1c': signal.SIGQUIT, # ctrl-\
'\x08': signal.SIGHUP, # ctrl-h
'\x09': signal.SIGINT, # ctrl-i
}
# setup tty
fd = sys.stdin.fileno()
old_tc = termios.tcgetattr(fd)
tty.setraw(fd)
# spawn command as a child proc
cmd = sys.argv[1:]
proc = subprocess.Popen(cmd)
while 1:
try:
ch = sys.stdin.read(1)
# example of ansi escape to move cursor down and to column 0
print '\033[1Eyou entered', repr(ch)
if ch == 'q':
break
signum = sigmap.get(ch)
if signum:
os.kill(proc.pid, signum)
finally:
pass
termios.tcsetattr(fd, termios.TCSANOW, old_tc)
sys.exit()
यहाँ एक सरल target.py
स्पिन और संकेत यह प्राप्त करता है मुद्रित करने के लिए स्क्रिप्ट है:
यहाँ term.py
जो एक बुनियादी कच्चे टर्मिनल दुभाषिया लागू करता है
% python term.py python target.py
you entered 'h'
you entered 'i'
you entered '\x1c'
got: SIGQUIT
you entered '\x15'
got: SIGUSR1
you entered '\x08'
got: SIGHUP
you entered '\t'
got: SIGINT
you entered 'q'
'2' हमेशा सत्य है। – delnan
किस मंच पर? विंडोज़ पर सिग्नल सपोर्ट में बहुत सारे सिग्नल गायब हैं ... –
इसकी टैग की गईं, लिनक्स। – Nix