2016-12-05 21 views
0

私はのpython 2.5.2Pythonスクリプトの実行中にシェルが入力(キーボード)を受け取らないようにする方法は?

を使用してスクリプトがシェルにいくつかのレポートをダンプbashのでスクリプトを実行しています。

どのように私はは殻を凍結し、そしてキー(または任意の他のキー)を入力してスクリプトを実行しながら、によって中断されることを防ぐことができますか?

答えて

0

これを達成するための洗練された方法は、スレッドで実行し、出力をファイルに書き込むことです。

これはスレッドでこれを実現する方法です。

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?") 
0

私が正しくあなたを理解していれば、あなたは、ユーザーのキーボード入力のエコーを無効にしたいです?

あなたは、次のコマンドを使用して、キーボードのエコーを無効にすることができます

stty -echo 

をし、再びそれを有効にします。

stty echo 

(ただし、あなたが入力しているものを見ることができるようwan't)

関連する問題