Python运行Shell而无需输入回车

8 浏览
0 Comments

Python运行Shell而无需输入回车

这个问题已经有了答案:

如何从用户读取单个字符?

这是我的第一个发布到stackoverflow,如果我没有遵循正确的礼仪,请告诉我。

我也是Python的新手,并希望将其纳入项目中。我目前有一个Emotiv EEG头戴式设备,并希望通过脑信号来运行家庭制3D打印机。为此,EEG头戴式设备由EmoKey 2.0.0.20(请参见附加照片)读取,然后EmoKey将发送按键到Python Shell,Python解释这个按键并通过COM端口将指令发送到我的Arduino运行打印机。

这似乎是一种间接的方式,但它是有效的,除了一个小问题。假设我想往左走,这将被发送到EmoKey,它键入\'L\'和换行键Enter到Python Shell中。理论上,这将移动打印机头向左。然而,当EmoKey发送Enter时,它只在Shell中创建新行,它实际上并没有执行。然后我必须手动按Enter键,这就打败了整个目的。

.getch()没有起作用,因为我不认为有实际的按键可以读取。下面的链接似乎也很有用,但到目前为止还没有起作用。

如何在不需要按Enter或确认中间内容的情况下运行shell脚本

我的问题是:当只有像L或R这样的字符被写入时,如何让Python执行Shell中写的内容?我不认为我可以让它等待按键,Python必须等待并在看到特定命令时自动执行。

我知道这可能看起来像下面链接的副本。然而,对于EmoKey而言,.getch到目前为止还没有起作用(也许这只是我的错误)。另外,我想找到一种方法让我的Python脚本读取输入到shell中的内容。虽然我开始了这个项目,只使用简单和原型模型的“L”和“R”命令,但我将转向使用G代码,这样我就可以与其他打印机或CNC设备进行通信。这是另一个原因为什么在我的情况下.getch不起作用,因为它只获取一个字符(一个单独的G代码命令将是几个字符长)。

Python读取用户的单个字符

我正在使用Windows 10和Python 2.7.11。

import serial
ser = 0
def init_serial():
    COMNUM = 3          #Enter Your COM Port Number Here.
    global ser          #Must be declared in Each Function
    ser = serial.Serial()
    ser.baudrate = 9600
    ser.port = COMNUM - 1   #COM Port Name Start from 0
    #ser.port = '/dev/ttyUSB0' 
    #Specify the TimeOut in seconds, so that SerialPort
    #Doesn't hangs
    ser.timeout = 10
    ser.open()          #Opens SerialPort
    # print port open or closed
    if ser.isOpen():
        print 'Open:'  + ser.portstr
init_serial()
while 1: 
    temp = raw_input('Send command + Enter:\r\n')
    ser.write(temp)         #Writes to the SerialPort
    #bytes = ser.readline()  #Read from Serial Port
    #print 'Response: ' + bytes      #Print What is Read from Port

EmoKey界面

admin 更改状态以发布 2023年5月23日
0
0 Comments

这个定义有点笨拙和不尽人意,但我认为它可以解决您的问题,而不需要安装任何新的包。如果我创建一个在此链接中定义的模块(我将其放在名为"getch.py"的文件中),我们就可以检查输入的键是否与字符串列表中的任何内容匹配。

from getch import getch
while True:
    if getch() in ['l', 'r', 'L', 'R']:
        print('This was the key I was looking for!')

从技术上讲,您只需要与您的操作系统相关的类部分,但我链接到的例子getch()函数在跨平台方面表现很好。

0
0 Comments

我想你正在寻找像readchar这样的东西:readchar:\n

import readchar
ch = readchar.readkey()

0