Schreiben und Auslesen in DOS mit hilfe von python

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
Pablo Escobar
User
Beiträge: 21
Registriert: Montag 12. November 2007, 15:15
Wohnort: Stuttgart

Servus,
da ich kompletter python anfänger bin hätte ich eine frage.
ich muss über eine CLI in meinem fall ist das DOS bzw die DOS-Eingabeaufforderung ein programm steuern.
sprich ich gebe dort befehle ein und bekomme gewisse ergebnisse zurück.
das ganze sieht so aus:
Bild

kann ich mit hilfe von python nun den befehl ausgeben und die rückgabewerte einlesen und in einer datei abspeichern?
wenn es geht wie lauten die befehle dafür?

ich bedanke mich hier schon mal für eure stellungnahmen.

gruß
Pablo

Edit (jens): URL zum Bild geändert.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

kann ich mit hilfe von python nun den befehl ausgeben
:?

Code: Alles auswählen

print "befehl"
Wirst du doch nicht gemeint haben...
und die rückgabewerte einlesen und in einer datei abspeichern?
Ich denke einmal, daß du so etwas gemeint hast:

Code: Alles auswählen

cli> spam -eggs=bacon > outfile
Wozu dann überhaupt Python? Das kann jeder CL-Interpreter.
In Python könntest du, wenns sein muss, über ein File (zB sys.stdin) iterieren:
http://docs.python.org/tut/node9.html#S ... 0000000000
Pablo Escobar
User
Beiträge: 21
Registriert: Montag 12. November 2007, 15:15
Wohnort: Stuttgart

wofür ich python brauche:
es gibt ein programm namens mks integrity client.
mit hilfe von mks wird die entwickelte software in einer datenbank verwaltet. nun muss garantiert werden dass diese software auch fehlerfrei läuft und gewissen normen entspricht.
dafür muss ich nun ein python skript erstellen.
sprich ein entwickler will sein programm mit hilfe von mks auf dem server abspeichern.
wenn er dies versucht wird seinem auftrag eine id zu gewiesen.
bevor die software dann auf dem server gespeichert wird muss es von reviewern abgesegnet werden.
ich soll nun einen objektiven reviewer programmieren.
sprich ein programm in python entwickeln welches permanent die ids abfragt, guckt ob neue software abgespeichert werden soll und diese dann prüft ob sie compilierbar ist und ob sie andere verschiedene tests besteht. wenn dies der fall ist bekommt sie ein ok, wenn nicht gibts ne email an den entwickler und er muss nochmal alles überarbeiten.

nun bekomm ich den mks ablauf via cli hin.
sprich ich komm an die ids etc ran.
muss aber jetzt den prozess mit hilfe von python automatisieren.

nur hab ich von python wenig bis gar keine ahnung. ist absolutes neuland für mich. hab bisher immer in c/c++ und pascal programmiert.
sprich ich muss es schaffen mit python die befehle in die cli zu schreiben
die werte,die mir die cli liefert abspeichern und dann weiterverwenden.

und an dem punkt hapert es immoment, da ich nicht weiss wie ich das mit python realisiere.
ich hatte mit print schon rumgetestet nur hat es noch nicht wirklich funktioniert.
deswegen hab ich hier um hilfe gebeten
wenn einer ideen hat wie ich befehle in die cli bekomme und die rückgabewerte auslesen kann wär ich echt dankbar
hab bisher noch nichts zu so einem thema gefunden
BlackJack

Mir ist immer noch nicht so ganz klar ob Du ein Programm in der DOS-Eingabeaufforderung hast das eine CLI bietet oder ob Du dort einfach nur ein Programm mit Argumenten startest das nicht interaktiv abläuft!? Letzteres ist einfach mit dem `subprocess`-Modul machbar. Ersteres ist schwieriger. Da würde ich mal auf `pexpect` als Ansatz tippen.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Da hast du 2 Möglichkeiten: entweder du pipest die Ausgabe an python.exe (in welchem Fall du ein "sauberes" Script hättest, das nicht vom OS abhängt) oder du pfeifst auf die Kommandozeile und machst dir einen Prozess mit os.popen*, wobei du uU betriebsystemabhängig wirst.

Zu VAriante 2:
http://docs.python.org/lib/os-newstream ... newstreams
BlackJack

Statt `popen*` sollte man aber lieber das `subprocess`-Modul benutzen, das soll die ganzen verschiedenen `popen*`-Varianten ablösen.
Pablo Escobar
User
Beiträge: 21
Registriert: Montag 12. November 2007, 15:15
Wohnort: Stuttgart

@blackjack
ich hab ein programm welches man über verschiedene modi benutzen kann.
stell es dir so wie linux vor
in linux kannste doch auch auswählen ob du kde, welches ja windows ähnlich ist, die shell etc nimmst
bei meinem programm kannste dir halt aussuchen ob du die gui nimmst
sprich die grafische oberfläche, die weboberfläche oder aber die cli
im falle meines programmes ist die cli die eingabeaufforderung.
ich öffne halt von windows die eingabeaufforderung und kann direkt die befehle eingeben um das programm zu steuern.

nun kann ich das programm per hand steuern und will diesen prozess mit python automatisieren.
sprich das pythonskript was ich schreiben möchte läuft permanent auf einem server durch.
mein aktuelles problem ist, dass ich keine ahnung hab wie ich mit hilfe von python die befehle in die eingabeaufforderung bringe und die werte, die ich zurückbekomme, auslesen kann.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Du machst einen Prozess mit dem `subprocess`-Modul und schickst ihm die Befehle auf der Standardeingabe. Dann musst du nur noch an der Standardausgabe lauschen.
BlackJack

Ganz ehrlich ist mir immer noch nicht ganz klar wie die Situation aussieht.

Wenn das Programm eine CLI zur Verfügung stellt ist das so etwas wie der Python-Interpreter im Terminal oder in der DOS-Eingabeaufforderung, also ein Programm mit "Textoberfläche" das ständig läuft und mit dem der Benutzer interagiert. Ist es so etwas?

Oder einfach nur Programme die aufgerufen werden und dann ohne Interaktion durchlaufen wie ``dir``, ``ping`` oder ``netstat``? Das ist dann aber nicht CLI. Ich weiss aber nicht ob Du das nicht eventuell mit der DOS-Eingabeaufforderung durcheinander bringst.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Ich glaube, dass sein Programm interaktiv Textzeilen einliest, und dass er mit CLI sein Programm-Interface meint.

Weil's mir gerade einfällt: am schönsten wäre eine Wrapper-Bibliothek um den C-Code. Dann kann man alle Interfaces mit Python bauen und muss dann nicht pfuschen.
Pablo Escobar
User
Beiträge: 21
Registriert: Montag 12. November 2007, 15:15
Wohnort: Stuttgart

platt formuliert könnte man sagen, ich will mit hilfe von python ein programm steuern. deswegen hatte ich mir überlegt mit python befehle in das command line interface des programmes einzugeben und die daten, die von dem programm zurückgegeben werden, mit python auszulesen,abzuspeichern und zu verwenden.
das skript soll halt gewisse dinge überwachen und dann auf veränderungen reagieren.
bin nun dabei mich mit dem subprocess modul und den popen objects auseinanderzusetzen. sprich erstmal gucken was das alles ist und was das alles kann^^

ich danke euch schon mal für eure hilfe. ohne euch hätte ich keinerlei ansatz gehabt und mir nen wolf gesucht.

also vielen dank das ihr euch die mühe gegeben habt und mir tipps gegeben habt. bei problemen werd ich mich hier im thread nochmal melden, vielleicht habt ihr ja dann noch die muse sich auch damit zu beschäftigen;)
danke euch
Antworten