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

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

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

cu Sebastian
Gast

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Gast

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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()

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Wo bekomme ich denn das subprocess Modul her?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

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!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Gast

genau das ist mein Problem! Ich glaub ich verzichte auf die Funktion aber dann haette ich n riesigen Quellcode! Mist mit nem referenziellen parameter waer das alles kein Problem! Die Funktion soll bestimmte Verzeichnisse aus einer datei auslesen die Suchkriterien sind immer die gleichen nur der Startpunkt variiert! Somit muss ich eben den Endpunkt nach beenden der Funktion bei erneutem starten als startpunkt verwenden. Aber ohne globale variable bzw RP is da wohl kein Land in sicht wie! Falls jemand doch noch eine Idee haben sollte waer ich sehr dankbar dafuer!
joe

Du kannst einfach die refs in eine liste (oder auch ein in dictionary) packen und diese dann der funktion übergeben. Siehe auch http://www.python.org/doc/faq/programmi ... -reference
joe
Gast

Danke fuer den Tip. Habs aber jetzt mal so probiert, dass ich einfach die neue Position als Rueckgabewert an den Parameter uebergeben habe! Mist haett ich auch gleich drauf kommen koennen *g* !

Muss euch echt ein Kompliment aussprechen! Ist eines der besten und hilfreichsten Foren ueberhaupt im Bezug auf Python!

Denke man hoert noch voneinander :-)

Mit freundlichen Gruessen

Christoph Seip
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Leonidas hat geschrieben:Das geht - wenn du die Variable global setzt. Also global variablenname
Dafür benutze ich auch gern mal eine pseudo-Klasse... z.B. für globale Einstellungs-Daten, die an mehreren Stellen benötigt werden. Das ganze läst sich dann auch Auslagern.
z.B.
config.py

Code: Alles auswählen

class dbconf:
    Host = "beispielserver.tld"
    dbname = "meinedatenbank"
    User = ""
main.py

Code: Alles auswählen

from config import dbconf
print "Host:",dbconf.Host
print "dbname:",dbconf.dbname

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Anonymous hat geschrieben:Funktion soll bestimmte Verzeichnisse aus einer datei auslesen die Suchkriterien sind immer die gleichen nur der Startpunkt variiert! Somit muss ich eben den Endpunkt nach beenden der Funktion bei erneutem starten als startpunkt verwenden. Aber ohne globale variable bzw RP is da wohl kein Land in sicht wie! Falls jemand doch noch eine Idee haben sollte waer ich sehr dankbar dafuer!
Ich glaube ich habe Dein Problem noch nicht ganz verstanden. Was muss denn ausserhalb einer Funktion sichtbar sein, bevor die Funktion fertig ist? Wenn das an anderer Stelle gebraucht wird, dann kann man es doch als Parameter übergeben!?
Antworten