标签: curses

如何拦截特殊(alt/ctrl)按键?

如何在python中捕获ALT+ KCTRL+ ALT+ 等组合键?Hcurses

python curses

8
推荐指数
1
解决办法
4551
查看次数

如何在Perl中屏蔽来自telnet的输出?

我可以在Perl中设置一个telnet连接没有问题,刚刚发现了Curses,我想知道我是否可以一起使用这两个连接来从telnet会话中获取输出.

我可以使用下面的简单脚本在行,列的基础上查看STDOUT的内容:

use Curses;
my $win = new Curses;
$win->addstr(10, 10, 'foo');
$win->refresh;
my $thischar=$win->inch(10,10);
print "Char $thischar\n";
Run Code Online (Sandbox Code Playgroud)

使用下面我可以打开一个telnet连接并发送\ receive命令没有问题:

use net::telnet;
my $telnet = new Net::Telnet (Timeout => 9999,);
$telnet->open($ipaddress) or die "telnet open failed\n";
$telnet->login($user,$pass);
my $output = $telnet->cmd("command string");
Run Code Online (Sandbox Code Playgroud)

...但我真正想做的是获取telnet响应(包括终端控制字符),然后使用curses在行/列上搜索.有谁知道我可以将两者连接在一起的方式?在我看来,curses只能在STDOUT上运行

curses perl telnet

8
推荐指数
2
解决办法
3875
查看次数

没找到Curses库

我正在尝试构建5.6.4-labs-innodb-memcached,但遇到此问题:

# cmake ./
-- MySQL 5.6.4-labs-innodb-memcached
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:83 (MESSAGE):
  Curses library not found.  Please install appropriate package,

  remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5- dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:127 (FIND_CURSES)
cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:263 (MYSQL_CHECK_READLINE)


-- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)

安装了libncurses5-dev并设置了CURSES_USE_NCURSES = true,但它没有帮助.有任何想法吗?我已经编译了这个包,但它是在另一台机器上...

编辑:

/var/cache/apt/archives/libncurses5-dev_5.7+20101128-1_i386.deb
/var/lib/dpkg/info/libncurses5.postinst
/var/lib/dpkg/info/libncursesw5.list
/var/lib/dpkg/info/ncurses-base.preinst
/var/lib/dpkg/info/libncursesw5.postrm
/var/lib/dpkg/info/libncursesw5.shlibs
/var/lib/dpkg/info/libncursesw5.md5sums
/var/lib/dpkg/info/libncurses5.symbols
/var/lib/dpkg/info/ncurses-bin.preinst
/var/lib/dpkg/info/ncurses-bin.list
/var/lib/dpkg/info/libncurses5-dev.list
/var/lib/dpkg/info/libncursesw5.symbols
/var/lib/dpkg/info/libncursesw5.postinst …
Run Code Online (Sandbox Code Playgroud)

mysql linux curses ncurses cmake

8
推荐指数
5
解决办法
3万
查看次数

程序退出后,使curses程序输出在终端回滚历史记录中保持不变

我对诅咒很陌生,所以我在python中尝试了一些不同的东西.

我初始化了窗口并为window对象设置了scrollok.我可以添加字符串,并且滚动工作,以便addstr()在窗口的末尾没有任何错误.

我想要的是能够在程序完成后在我的终端程序(tmux或KDE Konsole,在本例中)中滚动回程序输出.

在我的代码中,如果我跳过endwin()调用,我至少可以看到输出,但是终端需要重置调用才能恢复运行.

此外,即使在程序运行时,在curses窗口向下滚动之后,我也无法在Konsole中向后滚动以查看初始输出.

#!/usr/bin/env python2
import curses
import time
win = curses.initscr()
win.scrollok(True)
(h,w)=win.getmaxyx()
h = h + 10
while h > 0:
    win.addstr("[h=%d] This is a sample string.  After 1 second, it will be lost\n" % h)
    h = h - 1
    win.refresh()
    time.sleep(0.05)
time.sleep(1.0)
curses.endwin()
Run Code Online (Sandbox Code Playgroud)

python curses ncurses

8
推荐指数
1
解决办法
2809
查看次数

如何使用curses按下最后一个箭头键?

我正在使用curses编写一个Python蛇游戏,但是在控制蛇方面遇到了一些麻烦,我当前控制蛇的代码放在主循环中,看起来像这样:

while True:
    char = screen.getch()
    if char == 113: exit()  # q
    elif char == curses.KEY_RIGHT: snake.update(RIGHT)
    elif char == curses.KEY_LEFT: snake.update(LEFT)
    elif char == curses.KEY_UP: snake.update(UP)
    elif char == curses.KEY_DOWN: snake.update(DOWN)
    else snake.update()
    time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)

然而,代码似乎将按下的键视为一个que(因此当它用完箭头时蛇会停止),而我实际上希望它检索被按下的最后一个箭头键.

如何检索按下的最后一个箭头键?

python curses keypress

7
推荐指数
1
解决办法
7430
查看次数

在curses中打印到标准控制台

我正在构建一个python curses应用程序.

我有两种打印到curses窗口的方法:print xwindows.addstr(x)(以及其他类似的window.*选项).

但是,出于调试目的,我希望能够打印到标准控制台,所以当我退出curses窗口时,我有等待我的信息.我通常会使用print x,但打印到curses窗口.

sys.stout.write() 也失败了.

我怎样才能做到这一点?

使用完sys.stdout之后os.fdopen,这是追溯

 curses.nocbreak()
 _curses.error: nocbreak() returned ERR
 close failed in file object destructor:
 sys.excepthook is missing
 lost sys.stderr
Run Code Online (Sandbox Code Playgroud)

python curses ncurses

7
推荐指数
1
解决办法
7675
查看次数

curses库:为什么getch()清除我的屏幕?

我正在尝试使用C++学习curses库(pdcurses,因为我在Windows操作系统中).我有一个显示3个窗口的程序,然后是一个while循环,根据getch()捕获的按键进行一些处理.按下F1键时循环退出.

然而,尽管使用wrefresh()刷新所有三个窗口,但在我进入第一次按键之前没有任何内容出现.没有while循环,一切都显示正常.我做了很多测试,这就像第一次调用getch()将完全清除屏幕,而不是后续屏幕.

我的问题是:我错过了什么?起初,我在想,也许getch()调用了一个隐式的refresh(),但为什么后续调用它没有相同的行为呢?

非常感谢您的帮助.

这是代码.

#include <curses.h>

int main()
{
    initscr();
    raw();
    keypad(stdscr, TRUE);
    noecho();
    curs_set(0);

    WINDOW *wmap, *wlog, *wlegend;
    int pressed_key;
    int map_cursor_y = 10, map_cursor_x = 32;

    wlog = newwin(5, 65, 0, 15);
    wlegend = newwin(25, 15, 0, 0);
    wmap = newwin(20, 65, 5, 15);

    box(wmap, 0 , 0);
    box(wlog, 0 , 0);
    box(wlegend, 0 , 0);

    mvwprintw(wlog, 1, 1, "this is the log window");
    mvwprintw(wlegend, 1, 1, "legends");
    mvwaddch(wmap, map_cursor_y, map_cursor_x, '@');

    wrefresh(wlog);
    wrefresh(wmap);
    wrefresh(wlegend);

    while ((pressed_key …
Run Code Online (Sandbox Code Playgroud)

c++ curses getch pdcurses

7
推荐指数
2
解决办法
5238
查看次数

为什么我不能在python curses窗口中将lasttr()添加到最后一行/ col?

使用Python,我试图使用addstr()将光标位置写入我的curses窗口的右下角但是我收到错误.ScreenH-2工作正常,但从挡风玻璃底部打印到第二行. ScreenH-1根本不起作用.我究竟做错了什么?

import curses

ScreenH = 0
ScreenW = 0
CursorX = 1
CursorY = 1

def repaint(screen):   
   global ScreenH
   global ScreenW
   global CursorX
   global CursorY

   ScreenH, ScreenW = screen.getmaxyx()
   cloc = '   ' + str(CursorX) + ':' + str(CursorY) + ' '
   cloclen =  len (cloc)
   screen.addstr (ScreenH - 1, ScreenW - cloclen, cloc,  curses.color_pair(1));


def Main(screen):
   curses.init_pair (1, curses.COLOR_WHITE, curses.COLOR_BLUE)
   repaint (screen)   

   while True:
      ch = screen.getch()
      if ch == ord('q'):
         break

      repaint (screen)     


curses.wrapper(Main) …
Run Code Online (Sandbox Code Playgroud)

python curses

7
推荐指数
2
解决办法
3706
查看次数

Python curses打印终端颜色转义码

我有一个bash脚本打印一个漂亮的大彩色表,使用转义代码生成前景和背景tput.我的curses应用程序需要调用此bash脚本并将输出放在屏幕上.

当我尝试这样做时,curses会以堆栈跟踪结束爆炸:

File "./dostuff.py", line 38, in print_art
    screen.addstr(y, x_start, line)
TypeError: must be str, not bytes
Run Code Online (Sandbox Code Playgroud)

其中"线"是这样的:

'\x1b[44m\x1b[30mcard major minor revision runs updated\x1b(B\x1b[m\x1b(B\x1b[m\n'

有没有办法让诅咒解释这些颜色代码?我可以使用颜色代码对字符串进行任何处理以使curses显示它吗?或者我必须基本上从bash脚本中删除颜色,然后重新实现python中的着色?

编辑:

获取bash输出的命令类似于:

print_art(subprocess.Popen(["./automount", "backup", "list"], stdout=subprocess.PIPE).communicate()[0])
Run Code Online (Sandbox Code Playgroud)

通过调用decode()字节字符串,我可以使用curses来打印字符串,尽管有文字转义序列.除非我听到其他人的意见,否则我只是手动解析这些文字转义序列并转换为使用curses颜色方法.

python curses bash python-3.x python-curses

7
推荐指数
1
解决办法
1403
查看次数

使找不到curses.h

我有一个名为 samtools(1.3 版)的程序,用于操作您从 DNA 测序实验中获得的文件。

下载的程序包含在一个文件夹中。为了设置程序,我在终端(在 ubuntu 计算机上)输入该文件夹。我输入突击队“制造”。

它运行打印它所做的事情,但以错误消息终止:

bam_tview_curses.o bam_tview_curses.c
bam_tview_curses.c:41:20: fatal error: curses.h: No such file or directory
 #include <curses.h>
                    ^
compilation terminated.
make: *** [bam_tview_curses.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我最初的反应(在互联网上搜索后)是没有安装 curses,我尝试使用 sudo 来解决这个问题(显然我的用户不在 sudoers 列表中。

所以我试着看看curses是否已经安装,在查阅互联网后我尝试了

ldconfig -p | grep ncurses
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

libncursesw.so.5 (libc6,x86-64) => /lib/x86_64-linux-gnu/libncursesw.so.5
libncurses.so.5 (libc6,x86-64) => /lib/x86_64-linux-gnu/libncurses.so.5
Run Code Online (Sandbox Code Playgroud)

我认为这是因为安装了诅咒。但这让我不知所措。但这至少应该意味着存在诅咒,对吗?我在使用 ubuntu 或 C 程序方面不是很有经验(很久以前我在 C 方面上了一个较小的课程,虽然我已经使用了相当多的 linux 计算机,但我主要使用终端进行导航)

乐于助人!

curses ubuntu samtools

7
推荐指数
3
解决办法
2万
查看次数

标签 统计

curses ×10

python ×6

ncurses ×3

bash ×1

c++ ×1

cmake ×1

getch ×1

keypress ×1

linux ×1

mysql ×1

pdcurses ×1

perl ×1

python-3.x ×1

python-curses ×1

samtools ×1

telnet ×1

ubuntu ×1