我可以使用Python';s诅咒和cmd库在一起?

我可以使用Python';s诅咒和cmd库在一起?,python,cmd,curses,Python,Cmd,Curses,在Python中,我想同时使用cmd和curses编写一个终端程序,即使用cmd接受和解码完整的输入行,但使用curses定位输出 将curses和cmd的示例混合在一起,如下所示: import curses import cmd class HelloWorld(cmd.Cmd): """Simple command processor example.""" def do_greet(self, line): screen.clear()

在Python中,我想同时使用cmd和curses编写一个终端程序,即使用cmd接受和解码完整的输入行,但使用curses定位输出

将curses和cmd的示例混合在一起,如下所示:

import curses 
import cmd

class HelloWorld(cmd.Cmd):
    """Simple command processor example."""

    def do_greet(self, line):
        screen.clear()
        screen.addstr(1,1,"hello "+line)
        screen.addstr(0,1,">")
        screen.refresh()

    def do_q(self, line):
        curses.endwin()
        return True

if __name__ == '__main__':
    screen = curses.initscr()   
    HelloWorld().cmdloop()
我发现我打字时什么也看不到。curses大概是在屏幕上显示任何内容之前等待刷新。我可以切换到使用getch(),但这样会丢失cmd的值


有没有办法让它们一起工作?

这个问题似乎很老了。。。但是它引起了足够的注意,所以我想把我的答案抛在脑后。。你可以查看该网站,消除疑虑

更新:此答案链接到原始提问者的要点。只是为了拯救那些不得不跟随链接的人。。。以下是完整的代码:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import curses 
import curses.textpad
import cmd

def maketextbox(h,w,y,x,value="",deco=None,textColorpair=0,decoColorpair=0):
    # thanks to http://stackoverflow.com/a/5326195/8482 for this
    nw = curses.newwin(h,w,y,x)
    txtbox = curses.textpad.Textbox(nw,insert_mode=True)
    if deco=="frame":
        screen.attron(decoColorpair)
        curses.textpad.rectangle(screen,y-1,x-1,y+h,x+w)
        screen.attroff(decoColorpair)
    elif deco=="underline":
        screen.hline(y+1,x,underlineChr,w,decoColorpair)

    nw.addstr(0,0,value,textColorpair)
    nw.attron(textColorpair)
    screen.refresh()
    return nw,txtbox

class Commands(cmd.Cmd):
    """Simple command processor example."""
        
    def __init__(self):
        cmd.Cmd.__init__(self)
        self.prompt = "> "
        self.intro  = "Welcome to console!"  ## defaults to None
    
    def do_greet(self, line):
        self.write("hello "+line)

    def default(self,line) :
        self.write("Don't understand '" + line + "'")

    def do_quit(self, line):
        curses.endwin()
        return True

    def write(self,text) :
        screen.clear()
        textwin.clear()
        screen.addstr(3,0,text)
        screen.refresh()


if __name__ == '__main__':
    screen = curses.initscr()   
    curses.noecho()
    textwin,textbox = maketextbox(1,40, 1,1,"")
    flag = False
    while not flag :
        text = textbox.edit()
    curses.beep()
    flag = Commands().onecmd(text)

考虑到这是两个完全不同的语言世界,就像python一样,我认为基于对象的程序和批处理完全适用于windows控件。我没有看到任何方法可以做到这一点。您应该链接到外部资源以获取自己的代码。链接可以下载。至少对你的答案做一个简单的描述。是的。。同意,但这个问题还不算太老,即使得到了很多意见,也没有人有时间发表评论。。。所以我认为这会很有帮助。A) 我想你有兴趣被提升。。。但是,对交付的质量进行了投票;-)B) 请记住:最后,我们的答案旨在帮助尽可能多的人。。。只要努力做到“你最好”。。。一直都是,他他。。。这实际上是我(作为最初的提问者)的例子,说明了我最终是如何做到这一点的-D接受寻找并联系它的愚蠢答案。。。我的缺点是没有更新这里的答案。这段代码不运行(缩进错误),如果你修改它使其运行,它在任何方面都不会真正起到“诅咒内部的命令行”的作用-你试过使用它吗?您必须键入^G才能发送该行;您不能使用Enter并重复执行此操作,否则会影响您以前编写的内容和以前的输出。