Win32: Exe-Datei öffnen

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
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Hi,

wir kann ich unter Win32 eine Datei "sauber" öffnen? Ich habs schon mit dem os-Modul versucht:

Code: Alles auswählen

import os

os.system("C:\\text.exe")
Das Problem ist nur das die Eingabeforderung offen bleibt, und Python solange in ner Endlosschleife ist, bist ich die cmd.exe beendet hab :/

Gibts da keine bessere Möglichkeit? (Bei os.exec* wird Python ja beendet)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi FiRe^,

schau dir mal os.spawn in seinen Varianten an, damit kannst Du asychron laufende Prozesse erzeugen.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Hi Dookie,

danke erstmal! Aber das funktioniert irgendwie nicht:

Code: Alles auswählen

import os

>>> os.spawnlp(os.P_NOWAIT, "C:\\test.exe")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in ?
    os.spawnlp(os.P_NOWAIT, "C:\\test.exe")
AttributeError: 'module' object has no attribute 'spawnlp'
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hi

os.spanw wäre auch mein Vorschlag.
Hier ein Beispiel:

Code: Alles auswählen

#! /usr/local/bin/python

import time,os,sys

def start():
        x = os.getloadavg()
        count = 1
        for i in range(3):
                if x[0] <= 0.7:
                        print "starting job ..."
                        op = 'python test.py ' + str(count)
                        #os.popen(op)
                        os.spawnv(os.P_NOWAIT, sys.path, op)
                        count += 1
        while 1:
                x = os.getloadavg()
                if x[0] <= 0.5:
                        print x
                        print "starting job ..."
                        os.popen('python test.py ' + str(count))
                        count += 1
                time.sleep(0.1)

if __name__=="__main__": start()
Das ist nicht von mir ausschließlich von mir sondern nach Vorlage von Mark Lutz, aber das macht ja nichts. Du müßtest es halt windowsmäßig umgestalten. Ich benutze derlei Scripte wenn ich viele Jobs starten will und meine Kollegen nicht nerven möchte. (Deshalb die Sache mit dem getloadavg().) Je nach Anforderungen (Zahl der Prozessoren und dergleichen), müßtest Du das Skript noch anpassen.

Mit einem test.py, welches die Zahl, die als Argument mit übergeben wird als sys.argv einfängt, kannst Du schauen, wie das Skript funktioniert.

popen steht drin, weil, je nachdem, was Du genau willst, das eine andere Alternative sein kann. (Obwohl unter Windows wohl eher nicht, oder???)

Gruß,
Christian
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

die spawn-funktionen mit p sind nicht unter Windows verfügbar
Availability: Unix, Windows. spawnlp(), spawnlpe(), spawnvp() and spawnvpe() are not available on Windows. New in version 1.6.
Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
FiRe^
User
Beiträge: 14
Registriert: Samstag 25. September 2004, 18:25

Das hab ich ganz überlesen :)

Danke vielmals!!
Antworten