Bat Datei 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.
Antworten
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Hallo,

wie kann man am einfachsten eine Bat-Datei ausführen aus einem Python Skript heraus?

Danke!
MfG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``subprocess.Popen``?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Am "einfachsten" wohl mit:

Code: Alles auswählen

import os
os.system(r'c:\pfad_zu_meiner_batch_datei.bat')
Zwar nicht schön (weil Eingabeaufforderung mit geöffnet wird), aber einfach ist es allemal *hehehe*.

>>Masaru<<
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Danke an beide... funktioniert!!

Nun wollte ich eine Website öffnen, die aber Flash beinhaltet und würde gerne wissen, wie ich an meinen Standardbrowser weitergeben kann, dass er eine Seite öffnen soll?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Code: Alles auswählen

>>> import webbrowser
>>> webbrowser.open("http://www.google.de")
True
oder halt auch eine lokale Datei z.B "file://C:/test.html"

*edit*
bei der Antwort musste ich gerade an das denken:
http://www.python-forum.de/topic-12810.html
Zuletzt geändert von Sr4l am Mittwoch 30. April 2008, 18:55, insgesamt 1-mal geändert.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Also wenn ich in eine Batch Datei (oder direkt mittels os.system) folgendes ausführen lasse:

Code: Alles auswählen

"c:\_PROGRAMME_\Mozilla Firefox 2\firefox.exe" www.wow-europe.de

(Browserpfad ist natürlich Installationsabhängig), dann geht das relativ einfach *schulterzuck*.

Meinst du sowas? Oder eine Lösung wie von Sr4l vorschlagen (mit dem webbrowser Modul)?
Zuletzt geändert von Masaru am Mittwoch 30. April 2008, 18:53, insgesamt 1-mal geändert.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

genau sowas habe ich gesucht!!
Danke!
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

weißt du vllt. auch noch, wie man dieses Browserfenster wieder schließen kann?^^
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Machbar ... aber schwierig.

Das ist dann ganz und gar nicht mehr einfach, da man für solche eine Aktion:
  • a) die pywin32 extention library unter Anwendung von win32 Techniken zur Ermittlung des Handles des Browserfenster und anschliessendem win32gui.CloseWindow Aufruf nutzen sollte (verdammt kompliziert, wenn man davon keine Ahnung hat)
    oder
    b) sich eine Windows-Variante des "kill" commands besorgt (z.B. PsKill) und dann den Prozess (PsKill executable wieder mittels os.system oder subprocess.Popen aufgerufen) so richtig brutal abschiesst ... die Process-ID holt man sich, indem man den Browser manuell (nicht über das webbrowser modul) mittels os.spawnl startet
>>Masa<<
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

so, hab mir nun das ganze selbst gebastelt... für alle die es interessiert:

Code: Alles auswählen

pipe = subprocess.Popen(["tasklist.exe"], shell=False, stdout=subprocess.PIPE).stdout
string = pipe.readlines()

for x in string:
    a = re.compile("firefox.exe")
    b = a.match(x)
    if b:
        a = re.compile("[0-9]+")
        b = a.findall(x)
        subprocess.Popen("tskill %s" %b[0])
Vllt. wäre es auch einfacher gegangen, aber so geht es^^
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SchneiderWeisse hat geschrieben:Vllt. wäre es auch einfacher gegangen, aber so geht es^^
Ja, einfacher als mit Regulären Ausrücken bestimmt. Zudem ``firefox.exe`` auch ``firefoxDexe`` matcht, denn der Punkt steht nicht für den literalen Punkt sondern für jedes beliebige Zeichen.
Zuletzt geändert von Leonidas am Donnerstag 1. Mai 2008, 09:23, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Das "killen" von Prozessen ist nie wirklich schön ... *hust* geschweige denn immer gesund für eine Anwendung (und evenuelle zu persistenzierende Daten dahinter).

Wenn, würde ich weiterhin eine Abwicklung mittels win32gui.CloseWindow(handle) versuchen anzugehen.

>>Masaru<<
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

...und ich würde mal darüber nachdenken, ob es unbedingt notwendig ist, den Browser über das Programm wieder zu schließen. :roll:

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Zumal ich mir auch vorstellen könnte, dass man es einrichten kann, dass beim "Start" einer Webseite in einem schon vorhandenen Browserfenster einfach ein neuer Tab aufgemacht wird. Dann am Ende den ganzen Browser killen zu wollen, könnte den Benutzer doch sehr stark nerven. :-)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Es handelt sich um ein Skript für mich selbst... Deswegen kommt es mir auch nicht auf 100%ige Sauberkeit an..., da ich weiß was auf meiner Maschine läuft...

Also: Vielen Dank für eure Hilfe!
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Vielleicht wäre das hier noch etwas für Dich: http://www.tizmoi.net/watsup/intro.html
Schau Dir einmal Example 3 an.
MfG
HWK
Antworten