Seite 1 von 2

Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 20:27
von Ghillie_Suit
Hallo allerseits, ich habe ein programm geschrieben,dass eine batch datei schreibt,nun möchte ich diese auch ausführen lassen.Hat jemand von euch eine idee für so einen befehl?????

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 20:35
von syntor
Wie wäre es mit subprocess?

Nebenbei: Weshalb schreibst du Batchdateien die du mit Python ausführst? Wäre es nicht einfacher direkt ein Pythonprogramm zu schreiben?

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 20:36
von Py-Prog

Code: Alles auswählen

import subprocess
subprocess.Popen(parameter_string, executable=programm_pfad)
syntor hat geschrieben:Wie wäre es mit subprocess?

Nebenbei: Weshalb schreibst du Batchdateien die du mit Python ausführst? Wäre es nicht einfacher direkt ein Pythonprogramm zu schreiben?
@syntor es gibt bestimmte dinge die man einfacher in eine Batch-Datei bekommt als in Python, bzw. braucht man eine Lösung ohne Python.

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 21:25
von /me
Py-Prog hat geschrieben:@syntor es gibt bestimmte dinge die man einfacher in eine Batch-Datei bekommt als in Python, bzw. braucht man eine Lösung ohne Python.
Und weil man eine Lösung ohne Python braucht, möchte man das Shell-Skript gerne mit Python starten. Ja, das leuchtet ein.

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:21
von Py-Prog
Ok, daran hab ich nicht gedacht, :oops: aber das ist doch eigentlich egal. Ghillie_Suit hat ja gefragt wie er das ausführen kann.

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:28
von problembär
subprocess ist mal wieder Overkill.

Code: Alles auswählen

os.system('yourcommand')
genügt. Wenn Du die Ausgabe abfangen willst:

Code: Alles auswählen

os.popen('yourcommand')
subprocess ist dann sinnvoll, wenn Du ein anderes Programm über längere Zeit steuern willst (str.).

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:31
von Py-Prog
@problembär ich glaube er hat die Datei schon abgespeichert, und die wieder einzulesen und dann mit os.system auszuführen ist nicht gerade sinnvoll.

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:33
von syntor
Man sollte subprocess verwenden, da dort die Argumente direkt übergeben werden, und du dich nicht um das Escapen kümmern musst. (Natürlich mit einer Liste, nicht mit einem String und executable=)

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:35
von problembär
Denke nicht, daß "os.system()" was einliest. Schätze mal, es ist in CPython einfach ein Zugriff auf die C-Funktion "system();" (dazu "man system" unter Linux).

Gruß

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:50
von Py-Prog
problembär hat geschrieben:Denke nicht, daß "os.system()" was einliest.
:roll:

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 22:50
von cofi
problembär hat geschrieben:subprocess ist mal wieder Overkill.
Andersrum. Die beiden spawnen zwangsweise eine Shell. subprocess tut das nicht. Siehe auch http://docs.python.org/library/subproce ... -os-system und http://docs.python.org/library/subproce ... -os-popen3

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 23:02
von problembär
cofi hat geschrieben:
problembär hat geschrieben:subprocess ist mal wieder Overkill.
Andersrum. Die beiden spawnen zwangsweise eine Shell. subprocess tut das nicht. Siehe auch http://docs.python.org/library/subproce ... -os-system und http://docs.python.org/library/subproce ... -os-popen3
Ich sehe das mehr von der Programmierer-Seite, der bei "os.system()" sofort sieht, was gemeint ist, ohne sich durch Modul- und Klassendokumentationen zu wühlen.

Die Subshell sollte bei einfachen Programmaufrufen nur selten stören. Wenn doch, gäbe es noch diese "os.spawnl()"-Funktionen usw., aber in dem Fall würde ich auch das subprocess-Modul nehmen.

Re: Batch Dateien ausführen

Verfasst: Freitag 4. Februar 2011, 23:22
von Hyperion
Ghillie_Suit hat geschrieben:Hallo allerseits, ich habe ein programm geschrieben,dass eine batch datei schreibt,...
Alleine das mutet komisch an! Du generierst also aus Python heraus eine Batch-Datei... eher ungewöhnliches Vorgehen. Wobei ich mich dann schon besonders frage, wieso man die aus Python heraus dann starten will. Bei Code-Generatoren denkt man ja eher in die Richtung, dass die Zielsprache / Plattform da ausschlaggebend ist. Und dann würde man doch die Batchdatei eher direkt starten, oder?

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 00:44
von Leonidas
problembär hat geschrieben:Ich sehe das mehr von der Programmierer-Seite, der bei "os.system()" sofort sieht, was gemeint ist, ohne sich durch Modul- und Klassendokumentationen zu wühlen.
Huch, jetzt erzähl doch nicht, dass das bei ``subprocess.Popen`` nicht klar ist?! Ein "Programmierer" der ``os.system`` versteht aber ``subprocess.Popen`` oder ``subprocess.call`` nicht sollte sich vielleicht mit was anderen beschäftigen. Gartenbau zum Beispiel.

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 11:14
von Hyperion
Leonidas hat geschrieben:Gartenbau zum Beispiel.
Interessante Assoziation ;-)

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 16:05
von problembär
Leonidas hat geschrieben:
problembär hat geschrieben:Ich sehe das mehr von der Programmierer-Seite, der bei "os.system()" sofort sieht, was gemeint ist, ohne sich durch Modul- und Klassendokumentationen zu wühlen.
Huch, jetzt erzähl doch nicht, dass das bei ``subprocess.Popen`` nicht klar ist?! Ein "Programmierer" der ``os.system`` versteht aber ``subprocess.Popen`` oder ``subprocess.call`` nicht sollte sich vielleicht mit was anderen beschäftigen.
Damit meinte ich vor allem Leute, die von C und Perl kommen. In beiden gibt es die "system();"-Funktion, aber die 'subprocess.Popen'-Klasse dürfte (soweit ich weiß) eine Python-Spezialität sein. (Klassen überhaupt sind dort weniger gebräuchlich.)
Gartenbau ist eine gute Sache. ;)

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 16:18
von EyDu
problembär hat geschrieben:
Leonidas hat geschrieben:
problembär hat geschrieben:Ich sehe das mehr von der Programmierer-Seite, der bei "os.system()" sofort sieht, was gemeint ist, ohne sich durch Modul- und Klassendokumentationen zu wühlen.
Huch, jetzt erzähl doch nicht, dass das bei ``subprocess.Popen`` nicht klar ist?! Ein "Programmierer" der ``os.system`` versteht aber ``subprocess.Popen`` oder ``subprocess.call`` nicht sollte sich vielleicht mit was anderen beschäftigen.
Damit meinte ich vor allem Leute, die von C und Perl kommen. In beiden gibt es die "system();"-Funktion, aber die 'subprocess.Popen'-Klasse dürfte (soweit ich weiß) eine Python-Spezialität sein. (Klassen überhaupt sind dort weniger gebräuchlich.)
Gartenbau ist eine gute Sache. ;)
Sollte ich jetzt besser auch

Code: Alles auswählen

for i in range(len(liste)):
    liste[i] ...
verwenden, damit es alle verstehen? Wenn man eine neue Sprache lernt, muss man auch die üblichen Konstrukte und Standardbibliotheken lernen.

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 16:39
von problembär
EyDu hat geschrieben:Sollte ich jetzt besser auch

Code: Alles auswählen

for i in range(len(liste)):
    liste[i] ...
verwenden, damit es alle verstehen?
LOL: Tatsächlich verwende ich das genau so. Aber jeder, wie er mag (wenn's keine beruflichen Zwänge usw. dabei gibt), oder?

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 16:51
von DasIch
problembär hat geschrieben:LOL: Tatsächlich verwende ich das genau so. Aber jeder, wie er mag (wenn's keine beruflichen Zwänge usw. dabei gibt), oder?
Indem Fall geht es noch (vorrausgesetzt es wird nicht wiederholt sobald du drauf angesprochen wirst) aber bei os.system ist es einfach nur eine Dummheit die durch Unwissenheit nicht besser wird.

Davon unabhängig ist es der beste Weg sicherzustellen dass der nächste Patch/Pull Request noch nichtmal angesehen wird wenn man einen solchen irgendwem schickt.

Wenn man vor hat ernsthaft Hilfe zu bekommen für nicht-triviale Probleme oder bei irgendeinem Projekt mitarbeiten möchte welches von Leuten maintained wird die tatsächlich erwähenswert mehr Ahnung haben sollte man sich also angewöhnen Dokumentationen komplett durchzulesen und einen brauchbaren Stil entwickeln.

Wenn jemand eine grausame Schrift hat schaut man sich seine Texte auch nicht an, dass ist beim Programmieren nicht viel anders. Desweiteren ist es durchaus eine Frage des Respekts ob man jemandem schlechten Code abliefert oder nicht, vorrausgesetzt man weiß es besser oder zeigt zumindest den Willen sich zu bessern.

Re: Batch Dateien ausführen

Verfasst: Samstag 5. Februar 2011, 17:41
von lunar
@problembär: Von "system()" wird auch in C allgemein abgeraten.

Natürlich, jeder nach seinem Belieben, diese Feststellung ist unbestritten, doch jeder wird sich zu dem Belieben des Anderen seinen Teil denken. Allzu abweichende Ansichten, zumal wenn sie offensichtlich problematische Lösungen verteidigen, sind folglich nicht geeignet, das Bild eines guten und erfahrenen Programmierers zu vermitteln.