Python没有回车运行Shell

时间:2016-04-21 04:04:52

标签: python shell

这是我第一篇关于stackoverflow的帖子,所以如果我没有遵循正确的礼仪,请告诉我。

我也是Python新手,希望将它合并到一个项目中。我目前有一个Emotiv EEG耳机,想从大脑信号中运行一个自制的3-D打印机。为此,EEGKey 2.0.0.20读取EEG耳机(见附图),然后EmoKey会向Python Shell发送击键,Python解释这一点并通过COM PORT向我的Arduino运行打印机发送命令。 这似乎是一种间接的做事方式,但除了一个故障外,它有效。让我假装我想离开,这是发送到EmoKey类型' L'和击键进入Python Shell。理论上,这将使打印机头向左移动。但是,当EmoKey发送Enter时,它只在Shell中创建一个新行,它实际上并没有执行。然后,我必须手动按下输入,这打破了整点。

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

How to run a shell script without having to press enter/confirm s.th. inbetween

我的问题是:当只写出L或R这样的东西时,如何让Python执行shell中写的内容?我不认为我可以让它等待击键,Python必须等待并在看到特定命令时自动执行。

据我所知,这似乎与下面的链接重复。但是,到目前为止,.getch还没有与EmoKey合作过(也许这只是我的错误)。另外,我还没有找到一种方法让我的Python脚本读取放入shell的内容。虽然我已经用" L"而开始了这个项目。和" R"为了简化和原型设计,我将使用G代码,这样我就可以与其他打印机或CNC设备进行通信。这就是为什么.getch在我的情况下不能工作的另一个原因,因为它只抓取一个字符(单个G代码命令将长几个字符)。 Python read a single character from the user

我使用的是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 Interface

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找类似readchar的内容:

import readchar
ch = readchar.readkey()

答案 1 :(得分:0)

这个定义有点笨拙且令人不满意,但我认为它无需安装任何新软件包即可解决您的问题。如果我创建了一个模块defined in this link(我将它放在名为" 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()函数很好,因为它是跨平台的。

相关问题