Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #63098
| Path | csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!goblin3!goblin1!goblin.stu.neva.ru!uio.no!news.tele.dk!news.tele.dk!small.news.tele.dk!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail |
|---|---|
| Return-Path | <li.beinan@gmail.com> |
| X-Original-To | python-list@python.org |
| Delivered-To | python-list@mail.python.org |
| X-Spam-Status | OK 0.000 |
| X-Spam-Evidence | '*H*': 1.00; '*S*': 0.00; 'else:': 0.03; 'argument': 0.05; 'frontend': 0.07; 'result,': 0.07; 'tkinter': 0.07; 'tries': 0.07; '__name__': 0.09; 'exits': 0.09; 'sys,': 0.09; 'subject:How': 0.10; 'def': 0.12; 'gui': 0.12; "'''": 0.16; "'__main__':": 0.16; 'cmd': 0.16; 'command-line': 0.16; 'direction?': 0.16; 'event):': 0.16; 'self.root': 0.16; 'stdout': 0.16; 'subject:GUI': 0.16; 'subject:make': 0.16; 'subject:program': 0.16; 'subject:top': 0.16; '<': 0.19; 'connects': 0.19; 'command': 0.22; 'code,': 0.22; 'import': 0.22; 'shell': 0.22; 'message-id:@mail.gmail.com': 0.30; 'invoke': 0.31; 'os,': 0.31; 'pipe': 0.31; 'class': 0.32; 'skip:_ 10': 0.34; 'skip:s 30': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'module.': 0.36; 'subject:?': 0.36; 'application': 0.37; 'button': 0.38; 'skip:o 20': 0.38; 'skip:& 10': 0.38; 'to:addr:python-list': 0.38; 'to:addr:python.org': 0.39; 'how': 0.40; 'first': 0.61; 'such': 0.63; 'here': 0.66; 'header:Reply-To:1': 0.67; 'results': 0.69; 'reply-to:no real name:2**0': 0.71; 'reply- to:addr:gmail.com': 0.80 |
| DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:date:message-id:subject:from:to:content-type; bh=c0DyTtSBrrUxU50/S3SCXrbENHUxqK2qxx/xGPa9cYg=; b=AiYgEiQRxIs3QM3Tp8xC6gQef6CTnyP9nIQ0qwcrq1Rq9BOV3TJ7SMYXe15ac0MsZE Z1nn+tS/7IQCjqNMykOJ3R38WDbpUvclGz864sGtb5LttcMUXPXeknuBe5gSQL3JZJIW 38mjYD4nauOx14VSQYEHr5kP4EtR4vIOeVDKwNxcQkEYdtkyqvM8rLB5NJPbItcGj1p7 CVF+3r19nfEVZNTFjjfPjM9c7hphNVal+fTaroXFL2OGIrpW4/KlQ3Pqh4KEVFuZDdrC sGgxUwxY7cY94GihidIkNUWkjlm8Gg8Ld563GIx5T8EsCI/9b6Qq/qRAAdNxKBrjRGk5 ZoEQ== |
| MIME-Version | 1.0 |
| X-Received | by 10.58.90.1 with SMTP id bs1mr44912veb.29.1388803441749; Fri, 03 Jan 2014 18:44:01 -0800 (PST) |
| Date | Fri, 3 Jan 2014 21:44:01 -0500 |
| Subject | How to make a tkinter GUI work on top of a CUI program? |
| From | Beinan Li <li.beinan@gmail.com> |
| To | python-list@python.org |
| Content-Type | multipart/alternative; boundary=089e01184574cf030604ef1bff68 |
| X-BeenThere | python-list@python.org |
| X-Mailman-Version | 2.1.15 |
| Precedence | list |
| Reply-To | li.beinan@gmail.com |
| List-Id | General discussion list for the Python programming language <python-list.python.org> |
| List-Unsubscribe | <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe> |
| List-Archive | <http://mail.python.org/pipermail/python-list/> |
| List-Post | <mailto:python-list@python.org> |
| List-Help | <mailto:python-list-request@python.org?subject=help> |
| List-Subscribe | <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.4876.1388803444.18130.python-list@python.org> (permalink) |
| Lines | 111 |
| NNTP-Posting-Host | 2001:888:2000:d::a6 |
| X-Trace | 1388803444 news.xs4all.nl 2890 [2001:888:2000:d::a6]:55015 |
| X-Complaints-To | abuse@xs4all.nl |
| Xref | csiph.com comp.lang.python:63098 |
Show key headers only | View raw
[Multipart message — attachments visible in raw view] - view raw
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
cscope.
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
else:
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.pack()
self.btn.bind('<Button-1>', self.OnClickBtn)
def MainLoop(self):
os.chdir('path/to/myfolder')
cmd = shlex.split('/usr/local/bin/cscope -d')
self.subProc = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, bufsize=0)
self.root.mainloop()
def OnClickBtn(self, event):
print('OnClickBtn')
(stdOut, stdErr) = self.subProc.communicate('symbolName\n')
print(stdOut)
if __name__ == '__main__':
gui = MyGUI()
gui.MainLoop()
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
How to make a tkinter GUI work on top of a CUI program? Beinan Li <li.beinan@gmail.com> - 2014-01-03 21:44 -0500
csiph-web