如何使用键输入控制Python脚本?

时间:2016-01-01 01:48:44

标签: python input keyboard raspberry-pi robotics

我创建了一个Python脚本,可以从管道(名为pipe1)获取命令。我测试了脚本(我在终端的管道中手动编写)并且它有效。

现在我想用另一个Python脚本控制脚本,如果我按下wasd,可以写入管道。< / p>

您可以在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 个答案:

答案 0 :(得分: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. 或者,如果您只想输入打印wsadqe如果输入不在该列表中(也不是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')
    
  4. 关于Python中的缩进,我发现this mail表示:

      

    Python使用缩进来定义块。例如,要显示哪个   语句由受控制的forif语句控制   语句缩进。你的书应该谈谈这个。

         

    因此,在键入这些示例时,您需要在后面缩进行   forifwhile。缩进可以是任何一致的空格。   四个空格是一个非常常见的缩进。