Shell: Parameter mit Zeilenumbruch übergeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Hi,

Wie übergebe ich Zeilenumbrüche an ein Programm per Parameter auf der Shelll? Ich habe schon \n mit doppel, einfach und keinfach Quotierung ausprobier - ohne Erfolg. Interessanterweise wird \\ aber dennoch als \ maskiert dargestellt. Zur Anzeige des Parameters verwende ich ein Tkinter Label.

Und nun habe ich doch schon die Lösung gefunden. Es ist eine tolle Möglichkeit Forenbeiträge zu schreiben um dabei ein Problem zu reflektieren :D
Da ich die Frage nun schon formuliert habe werde ich den Post gleich mit Antwort versehen.

Also, es besteht die Möglichkeit auf der Shell mithilfe einer Datei foo die bereits richtige Zeilenumbrüche enthält und dem Befehl
>python programm "$(cat foo)"
den Text der Datei samt Zeilenumbrüchen anzuzeigen.
Für Nicht-Linux-Nutzer:
cat ist ein Tool, welches Dateien, deren Namen man als Parameter übergibt, auf der Shell ausgeben kann.
>cat foo
Gibt also den Text der Datei foo direkt auf der Shell aus.
Durch die Klammerung $( Befehl ) erreicht man, dass Befehle ausgeführt werden, obwohl sie z.B. wie hier als Parameter übergeben werden. $(cat foo) muss man sich hier also als Stellvertreter für den gesamten Text in der Datei foo denken.
Und schließlich sind die Doppelten Anführungszeichen wichtig dafür, dass der Gesamte Inhalt der Datei als ein Parameter behandelt wird.
Normalerweise sind ja schon
Hallo Welt!
zwei Parameter, weil diese auf der Shell mit Leerzeichen getrennt werden können. Damit es also zu einem Parameter wird:
"Hallo Welt!"
bzw. "$(cat foo)"

Falls jemand eine andere Lösung kennt würde mich diese trotzdem Interessieren. Vermutlich lässt sich der Umweg über die Datei vermeiden.

Schönen Abend,
Boa
Benutzeravatar
noisefloor
User
Beiträge: 3858
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was ist denn der Sinn der Sache? Das steht nirgendwo... Willst du die Daten im Python-Programm verarbeiten, die cat ausspuckt? Das geht sicherlich auch besser...

BTW: der eigentliche Sinn von cat ist _nicht_, Dateien auszugeben. Stichwort: useless use of cat. ;-)

Gruß, noisefloor
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

noisefloor hat geschrieben:Hallo,

was ist denn der Sinn der Sache? Das steht nirgendwo... Willst du die Daten im Python-Programm verarbeiten, die cat ausspuckt? Das geht sicherlich auch besser...

Hi noisefloor,
Ich habe mir unter Windows ein Python Programm geschrieben, welches ein Popup-Fenster erscheinen lässt. Und der Bequemlichkeit Halber noch ein Wrapper Skript, damit ich das Programm ohne "python " prefix aufrufen kann. In dem Fenster werden dann die Informationen ausgegeben, die per Parameter übergeben werden.
Das ist praktisch, wenn man über cygwin mit cron arbeitet und über etwas informiert werden will wie bei mir z.B. Updates einer Seite ohne RSS-Feeds und ungewöhnliches Verhalten beim testen meiner Webseite. Obwohl es für beide Fälle auch mehrere andere Tools gibt, denke ich, dass sich der Aufwand, der Dank Google C&P recht klein war, gelohnt hat und sich weiterhin lohnen wird :)
Der Sinn des Skriptes besteht genaugenommen darin mit möglichst wenig Aufwand eine unscheinbare graphische Meldung mit Text auf den Monitor zu bringen. So ein Windows Popup von der Statusleiste wäre aber nochmals cooler, falls jemand weiß wie ich das ohne viel Programmierung und Dokulesen hinbekomme ;-) Aber das ist im Gegenzug wieder C/Delphi/wasauchimmer und nicht mehr so schön portabel wie python.
noisefloor hat geschrieben:BTW: der eigentliche Sinn von cat ist _nicht_, Dateien auszugeben. Stichwort: useless use of cat. ;-)

Ja, ich habe mir schon überlegt das genauer auszuführen, habe mich dann aber doch auf die von mir genutzte und in diesem Kontext auch sinnvolle Eigenschaft beschränkt den Dateiinhalt auf die Standardausgabe zu schreiben.
...Ich meine natürlich, so ist es viiiiel hübscher und ich tue es weil ich _kann_ ;-)
Ne, die useless use of * Texte im Netz kann ich ebenfalls sehr empfehlen, für jeden der ein wenig Erfahrung mit der Shell gesammelt hat.

Grüße und gute Nacht,
Boa
Benutzeravatar
noisefloor
User
Beiträge: 3858
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Und der Bequemlichkeit Halber noch ein Wrapper Skript, damit ich das Programm ohne "python " prefix aufrufen kann.
Hm? Wenn du python regulär unter Windows installiert hast, werden alle Dateien mit Endung .py so wie so per Python-Interpreter ausgeführt. Und wenn du den richtigen She-Bang in der 1. Skriptzeile hast sollte das auch klappen.

Gruß, noisefloor
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

noisefloor hat geschrieben:Und wenn du den richtigen She-Bang in der 1. Skriptzeile hast sollte das auch klappen.
Sofern die Datei ausfuehrbar ist.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

noisefloor hat geschrieben:Hallo,
Hm? Wenn du python regulär unter Windows installiert hast, werden alle Dateien mit Endung .py so wie so per Python-Interpreter ausgeführt. Und wenn du den richtigen She-Bang in der 1. Skriptzeile hast sollte das auch klappen.
Oh, Danke. Unter Cygwin klappt es mit
#!/usr/bin/env python

Grüße,
Boa
Antworten