befehle an linux shell ü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.
Gast

befehle an linux shell übergeben!

Beitragvon Gast » Freitag 22. April 2005, 10:53

Hi @ All,

Ich arbeite gerade an einem Projekt, bei dem ich unter Linux verschiedenste Befehle ausführen muss. aktuelles Beispiel ist die Shell ausgabe in eine Datei umzuleiten. An sich keine schwere sache nur möchte ich dies gerne automatisieren indem ich es python machen lasse! ich habe schon versucht mit dem return Befehl dem system zu sagen was es zu tun hat doch es tut sich nichts! Darum bitte ich um eure Mithilfe! Ich brauche also nur den Befehl, der python einen String (programm /home/xy.ini > /home/xy.txt) an das system übergeben lässt das ihn dann ausführt!

MfG

Christoph Seip
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Beitragvon Mr_Snede » Freitag 22. April 2005, 11:15

In dem Thread Shell Befehl in Python implementieren (der ist im Moment genau unter deinem!)wird "find" aus Python heraus aufgerufen.

cu Sebastian
Gast

Beitragvon Gast » Freitag 22. April 2005, 11:36

Hmm mein Problem liegt eher darin, dass ich nicht direkt einen Shell Befehl, sonder eine ganze Kommandozeile an die Shell übergeben muss. Bei C++ geht das mit return da kann ich dem System einfach etwas zurueck geben! So etwas braeuchte ich! Ich rufe dann zwar auch einen Befehl aus os mit auf allerdings auch ein Programm und 2 unterschiedliche Pfade!
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 22. April 2005, 12:11


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 22. April 2005, 12:46

Anonymous hat geschrieben:Bei C++ geht das mit return da kann ich dem System einfach etwas zurueck geben! So etwas braeuchte ich!

Wie soll das gehen? Also das return kannst du in Python auch ganz einfach machen, dass das Programm einen Rückgabewert beim beenden liefert, mit sys.exit(wert).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Dienstag 26. April 2005, 07:59

Ok, soweit so gut! Danke schon mal fuer die Muehen! Ich hab jetzt ein Programm, mit dem ich shell kommandos an die shell uebergeben kann! Nur hab ich aus all dem nicht heraus bekommen koennen wie ich denn eine neue Shell oeffne und vorallem wie ich den Pfad wechseln kann! Befehle gehn aber den Pfad kann ich auch mit cd <pfad> nicht wechseln! Bitte daher um Hilfe!!

MfG

Christoph Seip
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 26. April 2005, 08:53

Natürlich kann man den Pfad mit cd wechseln... Allerdings nur in der aktuell geöffneten shell... d.h. du kannst Befehre verketten: "cd /;ls" das aktuelle work-dir für das Python-Skript bleibt aber das selbe. Wenn das auch geändert werden soll, mußt du halt ein os.chdir() machen und danach die shell Aufrufen.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Beitragvon Gast » Dienstag 26. April 2005, 09:27

ahja danke! Jetzt geht es! Aber mit welchem befehl oeffne ich den eine neue shell? Ein Problem hab ich noch! Und zwar versuche ich ein Programm aufzurufen indem ich den command string an die shell uebergebe. Schreib ich es direkt in die Shell hinein funktioniert alles aber wenn ich es ueber python mache passiert nichts er sagt mir nur: "no such file or directory" solangsam aerger ich mich aber schon!
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 26. April 2005, 09:31

Hast du dir das http://python.sandtner.org/viewtopic.php?t=2875 mal durchgelesen?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Beitragvon Gast » Dienstag 26. April 2005, 09:44

Ich habe es mir schon einige male durchgelesen nicht zu sagen studiert *g* aber ich bin leider noch nicht so lange in python unterwegs daher hab ich ca erst 60 % verstanden! Ich kann z.B. subprozess nicht importen da ich den header nicht habe! Ausserdem arbeite ich hier ausschliesslich unter linux und der Thread ist hauptsaechlich fuer Windows! Ich muesste doch nur die genaue syntax am besten anhand eines Beispieles fuer das oeffnen einer neuen shell, das hineinschreiben und das schliessen der Shell vor augen haben und schon wuerd ichs verstehen! Aber was genau an Parametern uebergeben werden muss ist leider nirgends ausfuehrlich beschrieben!
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 26. April 2005, 11:39

Code: Alles auswählen

import subprocess

# Kommando der ausgeführt wird
command = "ls -l"

# Befehl ausführen und Rückgabewert auslesen:
process = subprocess.Popen( command, shell=True, stdout=subprocess.PIPE)

# Ausgabe der shell anzeigen
print process.stdout.read()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Beitragvon Gast » Dienstag 26. April 2005, 12:58

Wo bekomme ich denn das subprocess Modul her?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 26. April 2005, 13:20

Aus Python 2.4 oder von effbot.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Dienstag 26. April 2005, 13:31

alles klar danke! Ich haette da nur noch eine Frage und zwar haeng ich gerade an dem Problem! Wie ist es denn moeglich in python einen explizieten referenzparameter anzulegen? Hab zwar jetzt schon gelesen dass sowieso jeder Parameter einer sei aber ich habe gerade das problem, dass ich in einer Funktion einen Wert stehen habe, den ich aber außerhalb der Funktion benoetige! Wie ich den da rausbekomme bevor die funktion fertig ist weis ich nicht!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 26. April 2005, 13:43

Das geht - wenn du die Variable global setzt. Also global variablenname und dann kannst du die Variable verändern - nur sei gewarnt: das ist kein guter Stil und sollte vermieden werden. Funktionen sollten aufgaben erfüllen und sonst hermetisch sein, keine Nebenwirkungen haben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]