2016-01-01 4 views
0

Я создал скрипт Python, который может принимать команды из канала (named pipe1). Я протестировал скрипт (я написал вручную в трубе в терминале), и он сработал.Как я могу управлять скриптом Python с ключевыми входами?

Теперь я хочу, чтобы контролировать сценарий с другим сценарием Python, который мог бы написать в трубе, если нажать w, a, s или d.

Вы можете найти скрипт на Pastebin

Я начал с этим сценарием:

В этом примере я просто хочу, чтобы напечатать ключи, которые я нажимаю. Позднее я добавлю команды echo "" для записи в трубе, которые я тестировал ранее.

import time 
import sys 

def key_inp (event): 
print 'Key:', event.char 
key_press = event.char 
sleep_time = 0.030 

while True: 
     try: 
     if key_press.lower() == 'w': 
     print "w" 
     elif key_press.lower() == 's': 
     print "s" 
     elif key_press.lower() == 'a': 
     print "a" 
     elif key_press.lower() == 'd': 
     print "d" 
     elif key_press.lower() == 'q': 
     print "q" 
     elif key_press.lower() == 'e': 
     print "e" 
     elif key_press.lower() == 'p': 
     print "stop" 

     except(KeyboardInterrupt): 
     print('Finished') 

Но я всегда получаю ту же ошибку:

File "key.py", line 12 
    if key_press.lower() == 'w': 
    ^ 
IndentationError: expected an indented block 

Моя проблема в том, что я нигде не нашел кого-то с той же проблемой, как и я. Я открыт для альтернатив для этого примера скрипта.

ответ

2
  1. Ваша задача о отступа, который очень важно в Python:

    def key_inp(event): 
        print 'Key:', event.char 
        key_press = event.char 
        sleep_time = 0.030 
    
        while True: 
         try: 
          if key_press.lower() == 'w': 
           print "w" 
          elif key_press.lower() == 's': 
           print "s" 
          elif key_press.lower() == 'a': 
           print "a" 
          elif key_press.lower() == 'd': 
           print "d" 
          elif key_press.lower() == 'q': 
           print "q" 
          elif key_press.lower() == 'e': 
           print "e" 
          elif key_press.lower() == 'p': 
           print "stop" 
    
         except(KeyboardInterrupt): 
          print('Finished') 
    
  2. Вы также можете попробовать следующий код, он делает то же самое в этом случае, но больше просто:

    def key_inp(event): 
        print 'Key:', event.char 
        key_press = event.char 
        sleep_time = 0.030 
    
        while True: 
         try: 
          if key_press.lower() == 'p': 
           print "stop" 
           # Do you also want exit here? 
           # If right, then add a `break` here. 
          else: 
           print key_press.lower() 
    
         except(KeyboardInterrupt): 
          print('Finished') 
    
  3. Или, если вы хотите напечатать w, s, a, d, q, e, если вход такой, и ничего не печатайте, если вход отсутствует в этом списке (и это не p). Тогда я предложил бы использовать список следующим образом:

    def key_inp(event): 
        print 'Key:', event.char 
        key_press = event.char 
        sleep_time = 0.030 
    
        while True: 
         try: 
          if key_press.lower() in ['w', 's', 'a', 'd', 'q', 'e']: 
           print key_press.lower() 
          elif key_press.lower() == 'p': 
           print "stop" 
    
         except(KeyboardInterrupt): 
          print('Finished') 
    

О отступом в Python, я нашел this mail, который говорит:

Python uses indentation to define blocks. For example, to show which statements are controlled by a for or if statement, the controlled statements are indented. Your book should talk about this.

So when typing these examples you need to indent the lines after the for , if or while . The indentation can be any consistent whitespace. Four spaces is a very common indent.

+1

Я upvoted, потому что вы ответили на вопрос предлагалось улучшение, но, возможно, вы могли бы отредактировать это, чтобы быть менее снисходительным/абразивным. Например, нет необходимости повторять слово «очень» во всех шапках и полужирным шрифтом три раза. То же самое с тремя вопросительными знаками, прежде чем предлагать улучшение. Это похоже на то, как вы думаете, что плакат является глупым, но ясно, что это всего лишь случай, когда кто-то является новичком в программировании/python. – skyler

+0

@skyler: Ах, правильно. Ред. –

+0

@ Кивен Гуан: Спасибо! – skyler

Смежные вопросы