私はのpython 2.5.2Pythonスクリプトの実行中にシェルが入力(キーボード)を受け取らないようにする方法は?
を使用してスクリプトがシェルにいくつかのレポートをダンプbashのでスクリプトを実行しています。
どのように私はは殻を凍結し、そしてキー(または任意の他のキー)を入力してスクリプトを実行しながら、によって中断されることを防ぐことができますか?
私はのpython 2.5.2Pythonスクリプトの実行中にシェルが入力(キーボード)を受け取らないようにする方法は?
を使用してスクリプトがシェルにいくつかのレポートをダンプbashのでスクリプトを実行しています。
どのように私はは殻を凍結し、そしてキー(または任意の他のキー)を入力してスクリプトを実行しながら、によって中断されることを防ぐことができますか?
これを達成するための洗練された方法は、スレッドで実行し、出力をファイルに書き込むことです。
これはスレッドでこれを実現する方法です。
import time
from threading import Thread
def noInterrupt():
f = open('/path/to/filename.txt','w+')
for i in xrange(4):
f.write(i)
time.sleep(1)
f.close()
a = Thread(target=noInterrupt)
a.start()
a.join()
print "done"
特定のユースケースはhereからrefrenced下回っコードがロックを取得するためにあなたが必要な場合:
class KeyboardLocker:
def __init__(self, serio=0):
self._on = False
self.serio = serio
def on(self):
return self._on
def write_value(self,path, value):
with open(path, "a") as f:
f.write(value)
def toggle(self):
if self.on():
self.turn_off()
else:
self.turn_on()
def description(self):
path = '/sys/devices/platform/i8042/serio%d/description' % (self.serio,)
with open(path, "r") as f:
description = f.read()
return description
def turn_on(self):
try:
self.write_value('/sys/devices/platform/i8042/serio%d/bind_mode' % (self.serio,),
'auto')
except IOError, e:
self._on = False
raise
else:
self._on = True
return self.on()
def turn_off(self):
try:
self.write_value('/sys/devices/platform/i8042/serio%d/bind_mode' % (self.serio,),
'manual')
self.write_value('/sys/devices/platform/i8042/serio%d/drvctl' % (self.serio,),
'psmouse')
except IOError, e:
self._on = True
raise
else:
self._on = False
return self.on()
if __name__ == "__main__":
kl = KeyboardLocker(serio=0)
device = kl.description()
print "We got a lock on", device
proceed = raw_input("Do you want to proceed? (y/n)").lower().startswith("y")
import sys
if not proceed: sys.exit(1)
kl.turn_off()
import time
wait = 5
print "Sleeping few seconds...", wait
time.sleep(wait)
print "Voila!"
kl.turn_on()
raw_input("Does it work now?")
私が正しくあなたを理解していれば、あなたは、ユーザーのキーボード入力のエコーを無効にしたいです?
あなたは、次のコマンドを使用して、キーボードのエコーを無効にすることができます
stty -echo
をし、再びそれを有効にします。
stty echo
(ただし、あなたが入力しているものを見ることができるようwan't)