Saya setuju dengan @stark, GUI adalah caranya.
Sebagai ilustrasi, inilah non-GUI yang tidak direkomendasikan cara yang menunjukkan cara melakukannya menggunakan utas, subproses, dan pipa bernama sebagai IPC.
Ada dua skrip:
-
entry.py
:menerima perintah dari pengguna, melakukan sesuatu dengan perintah tersebut, meneruskannya ke pipa bernama yang diberikan pada baris perintah:#!/usr/bin/env python import sys print 'entry console' with open(sys.argv[1], 'w') as file: for command in iter(lambda: raw_input('>>> '), ''): print ''.join(reversed(command)) # do something with it print >>file, command # pass the command to view window file.flush()
-
view.py
:Luncurkan konsol entri, cetak pembaruan konstan dalam utas, terima input dari pipa bernama dan teruskan ke utas pembaruan:#!/usr/bin/env python import os import subprocess import sys import tempfile from Queue import Queue, Empty from threading import Thread def launch_entry_console(named_pipe): if os.name == 'nt': # or use sys.platform for more specific names console = ['cmd.exe', '/c'] # or something else: console = ['xterm', '-e'] # specify your favorite terminal # emulator here cmd = ['python', 'entry.py', named_pipe] return subprocess.Popen(console + cmd) def print_updates(queue): value = queue.get() # wait until value is available msg = "" while True: for c in "/-\|": minwidth = len(msg) # make sure previous output is overwritten msg = "\r%s %s" % (c, value) sys.stdout.write(msg.ljust(minwidth)) sys.stdout.flush() try: value = queue.get(timeout=.1) # update value print except Empty: pass print 'view console' # launch updates thread q = Queue(maxsize=1) # use queue to communicate with the thread t = Thread(target=print_updates, args=(q,)) t.daemon = True # die with the program t.start() # create named pipe to communicate with the entry console dirname = tempfile.mkdtemp() named_pipe = os.path.join(dirname, 'named_pipe') os.mkfifo(named_pipe) #note: there should be an analog on Windows try: p = launch_entry_console(named_pipe) # accept input from the entry console with open(named_pipe) as file: for line in iter(file.readline, ''): # pass it to 'print_updates' thread q.put(line.strip()) # block until the value is retrieved p.wait() finally: os.unlink(named_pipe) os.rmdir(dirname)
Untuk mencobanya, jalankan:
$ python view.py
Daripada menggunakan jendela konsol atau terminal, periksa kembali masalah Anda. Apa yang Anda coba lakukan adalah membuat GUI. Ada sejumlah toolkit lintas platform termasuk Wx dan Tkinter yang memiliki widget untuk melakukan apa yang Anda inginkan. Kotak teks untuk output dan widget entri untuk membaca input keyboard. Selain itu, Anda dapat membungkusnya dalam bingkai yang bagus dengan judul, bantuan, buka/simpan/tutup, dll.