Seite 1 von 1

ein programm über python starten

Verfasst: Mittwoch 17. Juni 2009, 12:00
von max793
Hallo zusammen

meine Aufgabe ist es ein Python- Skript zu schreiben das eine Reihe von *.bat dateien aufruft.Ich würde gerne wissen welche befehle mir bei meinem Problem helfen könne!!!
vielleicht os.poppen?

danke

Verfasst: Mittwoch 17. Juni 2009, 12:05
von nemomuk
mit "poppen" hat das nichts zu tun ;)

Schau dir mal subprocess an.

Verfasst: Mittwoch 17. Juni 2009, 12:10
von cofi
Ja mit ``os.poppen`` kann man die Anzahl der Prozesse erhöhen. :twisted:

Speziell für `*.bat` ist ``os.startfile`` interessant. Aber ansonsten vergiss, dass das `os`-Modul Funktionen zum starten von Prozessen hat.

Hallo nochmal

Verfasst: Mittwoch 17. Juni 2009, 12:31
von max793
Hallo, hab das nun mit os.startfile ausprobiert und es klappt!! cool :D
was ich noch fragen wollte, wenn man nun ein Programm damit startet, bleibt dann das Python- Skript so lange an dieser stelle bis das Programm fertig ist oder geht das Python gleich zum nächsten schritt!!!!!!!!!!!!!
Wenn ja wie kann man das abstellen?

danke

Verfasst: Mittwoch 17. Juni 2009, 12:52
von cofi
Dann schau dir mal ``subprocess.Popen`` an, wenn du ein anderes Verhalten willst. Nicht vergessen die `cmd.exe` für die BAT-Dateien anzugeben.

Verfasst: Mittwoch 17. Juni 2009, 13:15
von max793
hallo

bitte verflucht mich nicht oder denkt nicht schlecht von mir aber subprozess habe ich nicht! ich weiß aber auch nicht wieso!!!!
Und das trauige ist daran, ich kann nicht änderen ( eine andere Version installieren,...). Deshalb muss ich euch die Frage stellen wie man das Problem sonst löst ohne subprocess?

-->Wie kann man ein Programm *.bat starten und Python wartet bis das es zu ende ist?

danke

Verfasst: Mittwoch 17. Juni 2009, 13:18
von cofi
Du sollst auch nicht nach subproZess, sondern nach subproCess suchen.
Das ist seit Python 2.4 dabei.

Verfasst: Mittwoch 17. Juni 2009, 13:24
von max793
ich habe die Python Version 2.2.1 eine 9 jahre alte Version :(

gibt es nicht einen älteren befehl für das Problem?

ich dachte mir es könnte mit
os.system()
os.spawnv
funktionieren oder

danke

Verfasst: Mittwoch 17. Juni 2009, 13:49
von Leonidas
Und was spricht dagegen sich das Leben einfacher zu machen, und eine Version zu installieren die zumindest halbwegs modern ist?

Verfasst: Mittwoch 17. Juni 2009, 13:55
von max793
leider es geht nicht, mein betreuer will es so haben und daher kann ich nichts machen, um eine neue Version zu intallieren brauch ich seine zustimmung

Somit muss ich mich mit dem zufrieden geben was ich habe

Verfasst: Mittwoch 17. Juni 2009, 14:07
von cofi
Dann teste doch mal, ob es geht (mit ``os.system``, ``os.popen``, usw.).
Du könntest auch die BAT-Dateien in Python schreiben.

Ein Argument für das Update wären auch Sicherheitslücken, da die Version seit langem nicht mehr betreut wird. Du könntest dir aber auch den Source von ``subprocess`` anschauen, vllt ist das `pure Python` und du kannst es übernehmen.

Verfasst: Mittwoch 17. Juni 2009, 14:10
von Leonidas
max793 hat geschrieben:um eine neue Version zu intallieren brauch ich seine zustimmung
Ja, also hol dir die Zustimmung Python 2.6 oder zumindest 2.5 zu installieren. Zudem ja viel Code der online ist, nicht mehr mit Python 2.2 funktioniert.

Verfasst: Mittwoch 17. Juni 2009, 14:15
von max793
danke für den tipp

aber du musst verstehen dieser typ hat nachdem das Python schon so lange dRAUf ist eigene sachen geschrieben, die ich nicht verstehe und die er nicht hergibt, und wenn er jetzt eine aktuelle version hätte würde er nun wieder was lernen, unvorstellbar!!!!!!!!!!!!! :cry:

ALSO muss ich mich mit diesem herumquälen und das problem lösen

ich brauche einen befehl der erstens ein programm straten und darauf wartet das es zu ende ist!!!!

ich weiß nur das zum Beispiel os.popen geht also die ur alten befehle

vielleicht wisst ihr was Danke

Verfasst: Mittwoch 17. Juni 2009, 15:05
von jonas

Code: Alles auswählen

# -*- coding: cp1252 -*-
import os

if __name__ == '__main__':
    
    konsole = r'C:\WINDOWS\system32\cmd.exe /C '
    skripts = [r'D:\testscript.bat',r'D:\nochein\skript.bat']
    zeichen = '"'

    # r'irgendeinstring' macht diesen zum raw string,
    # dass wird hier benötigt, damit die >>\<< nicht
    # vom interpreter als escape zeichen erkannt
    # werden und fehler verursachen

    for skript in skripts:
        print 'Skript: "%s"' % (skript)
        s = os.popen(''.join([konsole, zeichen, skript, zeichen]))

        print '*'*50
        for line in s.readlines():
            print line.encode('UTF-8')
        print '*'*50
        
        print 'Exitstatus: ', s.close()
So müsste es gehen.
Lg, Jonas 8)

Verfasst: Mittwoch 17. Juni 2009, 15:11
von EyDu
Das "(skript)" hat übrigens keine Wirkung. Ein einzelner Wert kann direkt, ohne es in ein Tupel zu packen, übergeben werden. Ein Tupel mit einem Element bekommst du mittels "(skript,)".

Sebastian

Verfasst: Mittwoch 17. Juni 2009, 15:14
von jonas
Okäse, danke. :D

Verfasst: Mittwoch 17. Juni 2009, 17:51
von max793
hallo

ich habe nun erfahren das ich " nur "ein Programm öffnen muss!

also der Befehl os.popen ist hier angebracht oder nicht?
was ich noch wissen möchte, wie sagt man das Python das er auf das gestartete Programm warten soll?

Danke für die große Mühe nir zu helfen!!