# =========================================================
# Execute System Commands
# =========================================================
# This script resizes correctly
# =========================================================
from tkinter import * # Python 3
##from Tkinter import * # Python 2
import os, string, sys
# ---------------------------------------------------------
# global variables
# ---------------------------------------------------------
buttonFont = ('arial', 12)
displayFont = ('Courier', 14)
# ---------------------------------------------------------
# button callback functions
# ---------------------------------------------------------
def execCallback():
clearResultsCallback()
c = cmd.get('0.0',END)
c = c.replace('\n',' ') + ' 2>&1'
##print('command: {}'.format(c))
for l in os.popen(c).readlines():
results.insert(END,l)
results.see(END)
def quitCallback():
sys.exit()
def clearCommandCallback():
cmd.delete('0.0',END)
def clearResultsCallback():
results.delete('0.0',END)
def displayMessage(m):
results.insert(END,m)
results.see(END)
# ---------------------------------------------------------
# main
# ---------------------------------------------------------
# --- Tk root
root = Tk()
root.title('Execute System Commands')
#--- a frame to hold everything
f = Frame(root, relief='flat', padx=4, pady=4)
f.grid(row=0, column=0, sticky=N+S+E+W)
Grid.columnconfigure(root, 0, weight=1)
Grid.rowconfigure(root, 0, weight=1)
# --- command text window
cmd = Text(f, font=displayFont, relief='groove',
borderwidth=2, width=80, height=5)
cmd.grid(row=0, column=0, sticky=N+S+E+W)
cmd.grid_columnconfigure(0, weight=1)
cmd.grid_rowconfigure(0, weight=0)
# --- action buttons
fb1 = Frame(f, relief='groove', borderwidth=2)
fb1.grid(row=1, column=0)
b1 = Button(fb1, text='Clear Command', font=buttonFont,
command=clearCommandCallback)
b2 = Button(fb1, text='Execute Command', font=buttonFont,
command=execCallback)
b3 = Button(fb1, text = 'Clear Results', font=buttonFont,
command=clearResultsCallback)
b1.grid(row=0, column=0)
b2.grid(row=0, column=1)
b3.grid(row=0, column=2)
f.grid_columnconfigure(0, weight=1)
f.grid_rowconfigure(1, weight=0)
# --- results text window
results = Text(f, font=displayFont, relief='groove',
borderwidth=2, width=80, height=20)
results.grid(row=3, column=0, sticky=N+S+E+W)
f.grid_columnconfigure(0, weight=1)
f.grid_rowconfigure(3, weight=1)
# --- quit button
fb2 = Frame(f, relief='groove', borderwidth=2)
fb2.grid(row=4, column=0)
b4 = Button(fb2, text='Quit', font=buttonFont,
command=quitCallback)
b4.grid(row=0, column=0)
f.grid_columnconfigure(0, weight=1)
f.grid_rowconfigure(4, weight=0)
# -- main loop
root.mainloop()