首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果数据通过管道传输到我的程序,Python curses getch()总是返回-1

Python curses 是一个用于终端控制的库,getch() 是其中的一个函数,用于从终端接收单个字符的输入。当数据通过管道传输到程序时,Python curses getch() 通常会返回-1 的原因可能有以下几点:

  1. 未设置终端为非阻塞模式:当数据通过管道传输到程序时,如果终端没有设置为非阻塞模式,getch() 函数可能会一直等待输入而导致阻塞。可以使用 fcntl 模块或 termios 模块来设置终端为非阻塞模式,示例代码如下:
代码语言:txt
复制
import fcntl
import termios

# 获取终端文件描述符
fd = sys.stdin.fileno()

# 获取终端属性
attr = termios.tcgetattr(fd)

# 设置终端为非阻塞模式
attr[3] = attr[3] & ~termios.ICANON & ~termios.ECHO

# 更新终端属性
termios.tcsetattr(fd, termios.TCSANOW, attr)

# 设置终端文件描述符为非阻塞模式
fcntl.fcntl(fd, fcntl.F_SETFL, fcntl.fcntl(fd, fcntl.F_GETFL) | os.O_NONBLOCK)
  1. 管道传输的数据为空:如果管道传输的数据为空,getch() 函数会返回-1。需要确保管道中有数据传输到程序。
  2. 程序存在其他问题导致返回-1:除了上述原因外,返回-1 的原因还可能与程序其他部分的代码逻辑有关,例如可能在调用 getch() 前未正确初始化 curses 库或终端。

总结:

Python curses getch() 函数返回-1 可能是由于终端未设置为非阻塞模式、管道传输的数据为空或程序其他问题导致。在使用 getch() 函数前,应确保终端设置为非阻塞模式,并保证管道中有数据传输到程序。另外,需检查程序其他部分的代码逻辑,确保 curses 库和终端正确初始化。详情可参考腾讯云 Serverless Cloud Function(SCF)提供的 Serverless 组件 SCF API 网关示例,链接地址:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python 在命令行模拟浏览器进退功能

python 实现栈 由于 python list 数据结构十分强大,所以使用 list 内置操作,我们很轻松地就实现了栈这种数据结构。栈作为一种受限线性表,我们只能操作栈尾部元素。...但需要注意是,我们需要判断栈是否为空,如果为空,我们不能进行删除元素操作;还要判断栈是否已满,如果已满的话,我们不能进行添加元素操作。top函数返回栈尾部一个元素,size函数返回大小。...退:是指从页面 d 返回页面 c ;进:是指返回页面 c 后再前进到页面 d。通过两个线性栈,就可以保存前进与后退所有的元素。...但是,如果我退到页面 b 之后,我又新开了页面 e,我就无法通过页面 e 返回到页面 c,d。...= curses.initscr() # stdscr.getchar() 返回是 # 输入单个字符 ascii 码值 # 假如输入'p',返回 112 stdscr.getch() # 清除屏幕

76210

3个Python 文本终端 GUI 框架,太酷了

大家好,我是辰哥~ 最近看到几个有意思基于文本终端 UI 框架,还可以制作命令行网易云音乐。 Curses 首先出场Curses[1]。...myscreen.refresh() myscreen.getch() curses.endwin() 需要注意 addstr 前两个参数是字符坐标,不是像素坐标 getch 会阻塞程序,直到等待键盘输入...curses.endwin() 作用是退出窗口 如果需要持续监听用户交互,需要写个循环,并对 getch() 获得输入进行判断 代码运行效果如下: 小试牛刀 Curses 非常轻巧,特别适合处理一下简单交互...Npyscreen Npyscreen[3] 也是一个用了编写文本终端 Python 组件库,是基于 Curses 构建应用框架。...,就可以看到命令行被设置为交互模式,按键时会在窗口中央显示出键名,如果按下 q 键,程序就会退出。

1K10
  • Python 文本终端 GUI 框架,太酷了!

    今天带大家梳理几个常见基于文本终端 UI 框架,一睹为快! Curses首先出场是 Curses[1]。...myscreen.refresh() myscreen.getch() curses.endwin() 需要注意 addstr 前两个参数是字符坐标,不是像素坐标getch 会阻塞程序,直到等待键盘输入...curses.endwin() 作用是退出窗口如果需要持续监听用户交互,需要写个循环,并对 getch() 获得输入进行判断代码运行效果如下:小试牛刀Curses 非常轻巧,特别适合处理一下简单交互...NpyscreenNpyscreen[3] 也是一个用了编写文本终端 Python 组件库,是基于 Curses 构建应用框架。...[1]Curses: https://docs.python.org/3/howto/curses.html[2]俄罗斯方块游戏: https://github.com/cSquaerd/CursaTetra

    86210

    Python 文本终端 GUI 框架,太酷了

    myscreen.refresh() myscreen.getch() curses.endwin() 需要注意 addstr 前两个参数是字符坐标,不是像素坐标 getch 会阻塞程序,直到等待键盘输入...curses.endwin() 作用是退出窗口 如果需要持续监听用户交互,需要写个循环,并对 getch() 获得输入进行判断 代码运行效果如下: 小试牛刀 Curses 非常轻巧,特别适合处理一下简单交互...Npyscreen Npyscreen[3] 也是一个用了编写文本终端 Python 组件库,是基于 Curses 构建应用框架。...,就可以看到命令行被设置为交互模式,按键时会在窗口中央显示出键名,如果按下 q 键,程序就会退出。...[1]Curses: https://docs.python.org/3/howto/curses.html [2]俄罗斯方块游戏: https://github.com/cSquaerd/CursaTetra

    1.9K60

    【说站】Python curses库如何使用

    Python curses库如何使用 1Python内置了curses库,但是对于Windows操作系统需要安装一个补丁以进行适配。...实例 Python内置了curses 库,其使用方法非常简单,以下脚本可以显示出当前按键对应编号: # 导入必须库 import curses import time   # 初始化命令行界面,返回...) 方法让 getch 为非阻塞等待(即使没有输入程序也能继续执行) stdscr.nodelay(True) while True:     # 清除 stdscr 窗口内容(清除残留符号)     ...stdscr.erase()     # 获取用户输入并放回对应按键编号     # 非阻塞等待模式下没有输入则返回 -1     key = stdscr.getch()     # 在 stdscr... 第一行第三列显示文字     stdscr.addstr(1, 3, "Hello GitHub

    1.1K30

    实现类似于top一样效果用于数据展示

    可以实现指定键退出等 发现了一个Python curses模块 来实现这个效果 初步代码 import curses import time def main(stdscr): # 禁止光标显示...等待一段时间 time.sleep(1) # 运行程序 curses.wrapper(main) 该程序在屏幕上打印出固定文本Fixed text that will not change...attrs是可选参数,用于设置文本属性,比如颜色、加粗、下划线等。如果不指定该参数,则默认使用终端窗口的当前属性。 addstr()函数返回值是一个整数,表示添加字符串长度。...# 运行程序 curses.wrapper(main) 在这个代码中,定义了一个表格,包括表头和表格数据。...如果不指定该参数,则默认使用空格。 需要注意是,这个示例程序表格只适用于终端窗口大小,如果终端窗口太小,表格就会超出终端窗口。如果需要适应不同大小终端窗口,需要动态计算表格列宽和行高。

    2.3K21

    Python游戏开发 制作AI贪吃蛇!

    具体功能: 1.智能模式:电脑自己玩(自己吃食物) 2.人机对战:电脑和人操作(在上步基础上加一个键盘控制贪吃蛇即可) 实现环境: Pycharm + Python3.6 + Curses + Win10...具体过程: 一:配置环境: Curses: 参考链接 (Cp后面代表本地Python环境,别下错了) ( Stackoverflow 真的是个非常好地方) 二: 1.灵感来源+参考链接: http:...,挑选距离最小走(这里就会涉及到将自己吃死,有待改进) (通过以上方法,就可以制造一个基本AI贪吃蛇了,当然,还有很多细节方面东西需要考虑) 报错: win = curses.newwin(HEIGHT..., tmpsnake, tmpboard) # 求得每个位置到蛇尾路径长度 171 for i in range(4): # 如果蛇头和蛇尾紧挨着,则返回False。...# 如果蛇可以吃到食物,board_refresh返回true 303 # 并且board中除了蛇身(=SNAKE),其它元素值表示从该点运动到食物最短路径长 304 if board_refresh

    94920

    python 实现 2048 游戏 (一)

    游戏规则:玩家通过 w s a d 控制数字移动方向,达成 2048 这个数字即获胜。 每次可以选择一个方向移动,数字便会朝这个方向移动,如果遇到相同数字就相加,遇到不同数字或者边界就停止移动。...同时会在空白地方生成 2 或者 4 随机数字。通过不断相撞、相加,最后达成 2048 这个数字。 游戏结构图 ?...-2.2+utf8-cp36-cp36m-win_amd64.whl curses 用法简介 curses 用于终端 shell 显示图形: 1# 屏幕不显示用户输入字符 2curses.noecho...() 3# 使用 curses 首先需要初始化 4stdscr = curses.initscr() 5# stdscr.getchar() 返回是 6# 输入单个字符 ascii 码值...7# 假如输入'p',返回 112 8stdscr.getch() 9# 清除屏幕 10stdscr.clear() 11# 打印字符 12stdscr.addstr('You win') 功能模块

    86720

    Python 学习笔记,制作控制台窗口小游戏-2048

    引入 curses,然后画棋盘第一行 curses 是控制台图形界面 curses介绍: https://docs.python.org/3/howto/curses.html ?...接收控制台指令 2048 游戏有6个按键操作: w, s, a, d 控制数字平移方向 r 放弃当前游戏,重置棋盘 q 退出游戏 接收指令通过 stdscr.getch() 方法实现 # stdscr.getch...初始化棋盘 将棋盘数据用二维数组对象存储起来,并且增加初始化、向上下左右移动、判断是否可移动方法game 。第一步先实现向左移动和判断 ?...,查找下一个可合并单元格 if i + 1 < 4 and row[i] == row[i + 1]: # 找到了下一个可合并单元格对...,查找下一个可合并单元格 if i + 1 < 4 and row[i] == row[i + 1]: # 找到了下一个可合并单元格对

    1.4K20

    python贪吃蛇代码-Python编写简单贪吃蛇核心代码

    时间:2018-11-14 概述:贪吃蛇 Python贪吃蛇完整代码,代码注释比较多,可学习一下Python编写游戏一些基本技巧,代码分享如下: #coding=utf-8 import curses...addch(y,x,ch) stdscr = curses.initscr() #初始化curses,返回屏幕对象 curses.noecho() #如果在终端上打字,在终端输入一个a就会显示一个a,如果不要这样效果...,比如上下左右,如果我们需要特殊处理这些键位,则可以调用keypad(True),这样当我们按下键盘左键,将会返回一个类似KEY_LEFT特殊值 gameX = 1 #坐标原点y gameY = 1..., ord(“j”): down, ord(“l”): right } “”” 相反方向.传入一个方向,返回其相反方向 “”” opposite = {curses.KEY_UP: curses.KEY_DOWN...#设置nodelay,为1时,使得控制台可以以非阻塞方式接受控制台输入,超时1秒 没什么用 if isGameOver: EndWin() return ch = stdscr.getch() #

    1.3K20

    腾讯云携手CODING,云端IDE——Cloud Studio初体验

    腾讯云授权 申请Free Trial试用后,系统会自动申请一台11GB,10G空间腾讯云主机作为Cloud Studio后端服务器,如果之前没有绑定腾讯云账号,此时会跳转至腾讯云授权页面,点击授权即可...[主机概览] 返回Cloud Studio,继续体验之旅。 体验终端 接下来通过Cloud Studio中集成终端来对这台云主机一探究竟,可以看到配色还是比较舒服。...[查看Java、Python版本] 可通过ifconfig命令查看网卡信息,但与硬件相关命令均无法调用。...= -1: # win.getch returns -1 if no key is pressed if key == curses.KEY_UP: if direction...但是,Free Trial版本中Access URL有效期仅为1个小时(解除有效期限制须升级CODING钻石会员),并且无法通过公网IP访问腾讯云专用主机,因此如果需要在公网中提供服务又对图形界面没有太大执念的话

    10.2K210

    Python 拓展 GDB(四)

    在本篇中,我们会把python当作一门“胶水语言”,A面是gdb接口,B面是一个终端界面的程序。姑且把这个终端界面程序称之为gti(gdb's terminal interface)吧。...我们会实现从gdb到gti单向数据传输。每当gdb触发断点时,就在gti上自动输出各项相关信息。这两者间通讯使用UDP协议。...提取出json格式数据 根据收到数据,重绘当前界面 在绘制终端界面时,我用是自带curses模块。...如果真的要开发实际可用终端界面程序,建议使用诸如urwid这样第三方包。 小结 如上面的例子所示,我们成功地用python实现了内嵌于gdb客户端。该客户端可以向外界暴露出gdb调试时信息。...如果你是想了解更多关于gdb调试信息,希望今后遇到相关问题时能想起编写python拓展予以解决。

    1.3K20

    Unix-Linux编程实践教程-chapter07-vediogame

    第7章 事件驱动编程:编写一个视频游戏 有些程序控制流很简单.而另外一些则要响应外部事件.一个 视频游戏要响应时钟和用户输入,操作系统也要响应时钟和外设 curses库有一些可以管理屏幕显示字符函数...一个进程通过设置计时器来安排事件.每个进程有三个独立计时器....计时器通过发送信号来通知进程.每个计时器都可以被设置为只发送 一次信号,或者按固定间隙发送信号 处理一个信号很简单.同时处理多个信号就复杂了.进程能决定是忽略 信号还是阻塞信号.进程能告知内核哪些信号在什么时候阻塞或忽略...有些函数执行一些复杂任务是不能被打断程序可以通过小心地 使用信号掩码来保护这些临界区代码 curses库基本函数: initscr() 初始化curses库和tty endwin() 关闭curses...一段修改一个数据结构代码如果在运行时被打断将导致数据得不完整或损毁, 则称这段代码为临界区,临界区需要保护,最简单办法就是阻塞或者忽略那些 处理函数将要使用或修改特定数据信号. kill向一个进程发送一个信号

    42230

    Python 200个标准库汇总!

    Python对象序列化 copyreg:注册机对pickle支持函数 shelve:Python对象持久化 marshal:内部Python对象序列化 dbm:Unix“数据库”接口 sqlite3...:日志处理器 getpass:简易密码输入 curses:字符显示终端处理 curses.textpad:curses程序文本输入域 curses.ascii:ASCII字符集工具 curses.panel...:curses控件栈扩展 platform:访问底层平台认证数据 errno:标准错误记号 ctypes:Python外部函数库 并发 threading:基于线程并行 multiprocessing...modulefinder:通过脚本查找模块 runpy:定位并执行Python模块 importlib:import一种实施 Python语言 parser:访问Python解析树 ast:抽象句法树...密码验证 termios:POSIX风格tty控制 tty:终端控制函数 pty:伪终端工具 fcntl:系统调用fcntl()和ioctl() pipes:shell管道接口 resource:资源可用信息

    1.3K50

    手把手教你写linux系统下贪吃蛇(二)

    我们c语言程序一般是单线程,从主函数开始,一行一行执行,遇到函数就跳进函数,线程是让两个函数同时执行。 就像你现在看我博客又在玩qq,这就是多线程。  ...如果不用线程,就会让操作不能立刻显现,显得你蛇很'笨'。 一)方向函数;(改变方向dirch) void turn(int direction) { if(abs(direction) !...{ op = getch(); switch(op){ case KEY_UP: turn(UP); break; case KEY_DOWN: turn(DOWN); break;...    第二个参数: 线程属性,调度策略,优先级都在这里设置,如果NULL为默认属性 //第三个参数: 线程入口函数,可返回一个(void*)类型返回值,该返回值可由pthread_join接收 /...汇总: #include #include #include #define BOADSIZE 20 #define UP

    1.1K20

    Python 200个标准库汇总

    Python对象序列化 copyreg:注册机对pickle支持函数 shelve:Python对象持久化 marshal:内部Python对象序列化 dbm:Unix“数据库”接口 sqlite3...:日志处理器 getpass:简易密码输入 curses:字符显示终端处理 curses.textpad:curses程序文本输入域 curses.ascii:ASCII字符集工具 curses.panel...:curses控件栈扩展 platform:访问底层平台认证数据 errno:标准错误记号 ctypes:Python外部函数库 并发 threading:基于线程并行 multiprocessing...modulefinder:通过脚本查找模块 runpy:定位并执行Python模块 importlib:import一种实施 Python语言 parser:访问Python解析树 ast:抽象句法树...密码验证 termios:POSIX风格tty控制 tty:终端控制函数 pty:伪终端工具 fcntl:系统调用fcntl()和ioctl() pipes:shell管道接口 resource:资源可用信息

    91510

    200 多个 Python 标准库介绍

    其中有些模块经过专门设计,通过将特定平台功能抽象化为平台中立 API 来鼓励和加强 Python 程序可移植性。...Windows 版本 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。...:日志配置 logging.handlers:日志处理器 getpass:简易密码输入 curses:字符显示终端处理 curses.textpad:curses程序文本输入域 curses.ascii...:ASCII字符集工具 curses.panel:curses控件栈扩展 platform:访问底层平台认证数据 errno:标准错误记号 ctypes:Python外部函数库 并发 threading...pkgutil:包扩展工具 modulefinder:通过脚本查找模块 runpy:定位并执行Python模块 importlib:import一种实施 Python语言 parser:访问Python

    1K30
    领券