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

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

Скрипт можно найти на 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

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

Ответы (1)

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

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

    def key_inp (событие):
        print 'Key:', event.char
        key_press = event.char
        sleep_time = 0,030
    
        в то время как True:
            пытаться:
                если key_press.lower () == 'p':
                    напечатать "стоп"
                    # Вы тоже хотите выйти сюда?
                    # Если да, то добавьте сюда `break`.
                еще:
                    печать key_press.lower ()
    
            кроме (KeyboardInterrupt):
                print ('Готово')
    
  3. Или, если вы хотите только напечатать w, s, a, d, q, e, если ввод такой, и ничего не печатать, если ввода нет в этом списке (и не p). Тогда я бы предложил использовать следующий список:

    def key_inp (событие):
        print 'Key:', event.char
        key_press = event.char
        sleep_time = 0,030
    
        в то время как True:
            пытаться:
                если key_press.lower () в ['w', 's', 'a', 'd', 'q', 'e']:
                    печать key_press.lower ()
                elif key_press.lower () == 'p':
                    напечатать "стоп"
    
            кроме (KeyboardInterrupt):
                print ('Готово')
    

Что касается отступа в Python, я нашел это письмо, в котором написано:

Python использует отступы для определения блоков. Например, чтобы показать, какой операторы управляются оператором для или if, контролируемый заявления имеют отступ. Об этом должна быть написана ваша книга.

Итак, при вводе этих примеров вам нужно делать отступ строк после для, , если или , а. Отступ может быть любым непротиворечивым пробелом. Четыре пробела - очень распространенный отступ.

2022 WebDevInsider