Ich kodiere eine sehr einfache Python Tkinter GUI, um ein Befehlszeilen-Python-Skript zu steuern.
Meine GUI wird auf einem Windows-Host laufen, und ich möchte, dass sie die mehrzeilige Klartextausgabe des Skripts anzeigt, die an die GUI als String zurückgegeben wird und - natürlich - Zeilenumbrüche enthält ( \n
Zeichen).
Ich füge also ein Text-Widget in die GUI ein, und wenn mein Skript - zum Beispiel - eine Ausgabe liefert, die mit dieser Teilzeichenkette beginnt:
RESULT STATUS: OK- Service is currently running\n\nDETAILS: ...
enthält der angezeigte Text schwarze vertikale Balken ( |
), wann immer es eine \n
Zeilenumbruchzeichen.
Die Linien sind korrekt unterbrochen, aber diese seltsamen Balken lassen mich vermuten, dass die \n
Das Zeichen für den Zeilenumbruch wird nicht korrekt dekodiert, und ich möchte nicht, dass die Balken in meiner Ausgabe angezeigt werden.
Irgendeine Idee, wie man Tkinter dazu bringt, Zeilenenden korrekt anzuzeigen? Vielen Dank im Voraus.
Code
Dies ist der Arbeitsablauf für meine GUI:
- Ich klicke auf eine Schaltfläche, die die CallMe()-Callback-Funktion aufruft
- Die Funktion callMe() analysiert die von einem Entry-Widget kommenden Argumente und ruft dann das Python-Befehlszeilenskript auf
- Das Skript gibt die oben genannte Zeichenkette zurück, und diese wird vom Callback verwendet, um den Text des Text-Widgets zu aktualisieren
Hier ist der Code:
#init the GUI elements and the Text widget
from Tkinter import *
root = Tk()
top = Frame(root)
outputFrame = Frame(top)
outputFrame.pack(side='top', padx=20, pady=20)
outputTextArea = Text(outputFrame, yscrollcommand=scrollbar.set, width=150, height=40)
outputTextArea.pack(side='left', expand=YES, fill='both')
#callback executed when the button is clicked
def callMe()
#get parameters
# .....
#command line execution script execution
process = subprocess.Popen(command_line, stdout=subprocess.PIPE, shell=True)
#get script output
matr = process.stdout.readlines()
#from a list of strings to a single string
output = "".join(matr)
#write output into the Text widget
outputTextArea.insert(0.0, output)