wxPython: how to create a bash shell window?

后端 未结 4 836
渐次进展
渐次进展 2020-12-01 15:11

I want to create a popup window using wxPython that acts like a bash shell. I don\'t want a terminal emulator, I don\'t need job control, I just want a REPL (Read, Eval, Pr

4条回答
  •  温柔的废话
    2020-12-01 15:36

    i searched but there doesn't seem to be any exiting bash shell for wxPython though wx.py module has Shell module which is for python interpretor good thing is you can pass your own interpretor to it,so I have come with very simple bash interpreter. example currently reads only one line from bash stdout, otherwise it will get stuck, in real code you must read output in thread or use select

    import wx
    import wx.py
    from subprocess import Popen, PIPE
    
    class MyInterpretor(object):
        def __init__(self, locals, rawin, stdin, stdout, stderr):
            self.introText = "Welcome to stackoverflow bash shell"
            self.locals = locals
            self.revision = 1.0
            self.rawin = rawin
            self.stdin = stdin
            self.stdout = stdout
            self.stderr = stderr
    
            #
            self.more = False
    
            # bash process
            self.bp = Popen('bash', shell=False, stdout=PIPE, stdin=PIPE, stderr=PIPE)
    
    
        def getAutoCompleteKeys(self):
            return [ord('\t')]
    
        def getAutoCompleteList(self, *args, **kwargs):
            return []
    
        def getCallTip(self, command):
            return ""
    
        def push(self, command):
            command = command.strip()
            if not command: return
    
            self.bp.stdin.write(command+"\n")
            self.stdout.write(self.bp.stdout.readline())
    
    app = wx.PySimpleApp()
    frame = wx.py.shell.ShellFrame(InterpClass=MyInterpretor)
    frame.Show()
    app.SetTopWindow(frame)
    app.MainLoop()
    

提交回复
热议问题