首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python不带Enter键运行Shell

Python不带Enter键运行Shell
EN

Stack Overflow用户
提问于 2016-04-21 12:04:52
回答 2查看 318关注 0票数 1

这是我第一篇关于stackoverflow的文章,如果我没有遵守正确的礼仪,请告诉我。

我也是Python的新手,我想把它合并到一个项目中。我目前有一个Emotiv EEG耳机,我想运行一台根据大脑信号自制的3-D打印机。要做到这一点,脑电图耳机由EmoKey 2.0.0.20读取(见附件照片),然后EmoKey将发送按键到Python Shell,Python解释并通过COM端口将命令发送到我的Arduino run打印机。这可能看起来是一种间接的方式,但除了一个障碍外,它是有效的。假设我想的是左边,它被发送到EmoKey,它输入'L‘,然后击键进入Python Shell。理论上,这将使打印头向左移动。但是,当EmoKey发送Enter时,它只在外壳中创建一个新行,并不实际执行。然后我不得不手动按回车键,这就失去了全部意义。

.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-code,这样我就可以与其他打印机或CNC设备进行通信。这就是为什么.getch在我的例子中不能工作的另一个原因,因为它只获取一个字符(一个G-code命令只有几个字符)。Python read a single character from the user

我使用的是Windows 10和Python 2.7.11。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2016-04-21 12:23:38

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

代码语言:javascript
复制
import readchar
ch = readchar.readkey()
票数 1
EN

Stack Overflow用户

发布于 2016-04-21 12:30:26

这个定义有点笨拙和不令人满意,但我认为它解决了你的问题,而不需要安装任何新的包。如果我创建了一个模块defined in this link (我把它放在一个名为“getch.py”的文件中),我们就可以检查输入键是否与字符串列表中的任何内容匹配。

代码语言:javascript
复制
from getch import getch

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

从技术上讲,你只需要我链接的类中与你的操作系统相关的部分,但我链接的这个示例getch()函数很好,因为它是跨平台的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36759447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档