Batch Dateien ausführen

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.
Ghillie_Suit
User
Beiträge: 10
Registriert: Dienstag 25. Januar 2011, 15:37

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?????
syntor
User
Beiträge: 88
Registriert: Donnerstag 2. Dezember 2010, 03:56

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?
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

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.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Ok, daran hab ich nicht gedacht, :oops: aber das ist doch eigentlich egal. Ghillie_Suit hat ja gefragt wie er das ausführen kann.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
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.).
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

@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.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
syntor
User
Beiträge: 88
Registriert: Donnerstag 2. Dezember 2010, 03:56

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=)
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ß
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

problembär hat geschrieben:Denke nicht, daß "os.system()" was einliest.
:roll:
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben:Gartenbau zum Beispiel.
Interessante Assoziation ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
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. ;)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
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?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
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.
Antworten