How to make a tkinter GUI work on top of a CUI program?

Discussion in 'Python' started by Beinan Li, Jan 4, 2014.

  1. Beinan Li

    Beinan Li Guest

    I know how to make a GUI program work on top of a console program like
    "ls", which exits immediately.

    But some console programs have their own shell or ncurse-like CUI, such as
    So I figured that I need to first subprocess.popen a bidirectional pipe and
    send command through stdin and get results from stdout and stderr.

    But in such a case I found that communicate('cmd') will freeze.

    Am I in the right direction?

    Here is my code, in which the application connects to cscope through pipe,
    the GUI has only one button that tries to invoke a cscope search command
    and get the result, the Enter key is represented as \n in the stdin
    argument of communicate():

    import sys, os, os.path, subprocess, shlex
    if sys.version_info.major < 3:
    import Tkinter as Tk
    import tkinter as Tk
    class MyGUI(object):
    Frontend of the main command-line module.
    def __init__(self):
    self.subProc = None
    self.root = Tk.Tk()
    self.frame = Tk.Frame(self.root)
    self.btn = Tk.Button(self.frame, text='My Command')
    self.btn.bind('<Button-1>', self.OnClickBtn)
    def MainLoop(self):
    cmd = shlex.split('/usr/local/bin/cscope -d')
    self.subProc = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE,
    stderr=subprocess.PIPE, bufsize=0)
    def OnClickBtn(self, event):
    (stdOut, stdErr) = self.subProc.communicate('symbolName\n')
    if __name__ == '__main__':
    gui = MyGUI()
    Beinan Li, Jan 4, 2014
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.