Programm ohne DOS-Fenster laufen lassen

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.
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Programm ohne DOS-Fenster laufen lassen

Beitragvon Roman » Dienstag 28. März 2006, 08:37

Hallo,
Ich möchte ein Programm unter Windoof schreiben, dieses soll aber im Hintergrund ablaufen und nicht das DOS-Fenster aufrufen!
(Es würde auch ein Befehl reichen, der dsa Fenster schliesst...)
Das Programm soll bei Systemstart aufgerufen werden und dann im Hintergrund laufen, bis zum shutdown des COmputers.
Kann mir da jemand helfen?
PS: OS ist WinXP und ich benutze Python 2.2.2
Danke schon mal im Vorraus
Roman
PS: Ich habe schon google und das Forum durchsucht, bin aber auf nichts gestossen, was mir wirklich geholfen hätte... Vielleicht hatte ich aber auch nur ein Brett vorm Kopf :oops:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon gerold » Dienstag 28. März 2006, 09:14

Roman hat geschrieben:dieses soll aber im Hintergrund ablaufen und nicht das DOS-Fenster aufrufen!
[...]
PS: OS ist WinXP und ich benutze Python 2.2.2

Hi Roman!

1. Starte dein Programm nicht mit python.exe sondern mit pythonw.exe.
Das passiert automatisch, wenn du dein Python-Programm nicht mit der Endung ".py" sondern mit ".pyw" versiehst.

2. Du solltest dir eventuell mal überlegen, auf eine aktuellere Python-Version upzudaten. :-)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Dienstag 28. März 2006, 09:46

Ich glaube eher, er meint einen Service. Das macht man mit win32service aus den Python for Windows Extensions http://starship.python.net/crew/mhammond/win32/
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Roman » Donnerstag 30. März 2006, 08:36

Hallo,
Danke erst mal für eure Antworten...
Ich möchte in der Tat einen Daemon (ich glaube, das nennt man so... Bin noch nicht so sicher mit der "Fachsprache" :oops: ) schreiben.
Also genau genommen einen Wecker, der mp3s abspielen soll. Der ist allerdings eine Konsolenanwendung, so dass man ihn nicht mit pythonwin starten sollte, oder?
Hier ist der Quellcode:

Code: Alles auswählen

#wecker.py
import threading
import time
import os
global zeit
from os import *
#Pfad der gewuenschten mp3-Datei speichern
if not path.exists('C:\\programme\\mp3wecker.txt'):
    pfad=raw_input("Bitte den absoluten Pfad der gewuenschten mp3 Datei angeben")
    datei=file('C:\\programme\\mp3wecker.txt',"w")
    datei.write(pfad)
    datei.close()
zeit=raw_input("Bitte Weckzeit angeben (z.B. 16:13)")
#Funktion zum Pruefen, ob die Weckzeit der aktuellen Uhrzeit entspricht
def checker():
    if time.strftime("%H:%M")==str(zeit):
        print "AUFWACHEN!"
        datei=file('C:\\programme\\mp3wecker.txt',"r")
        pfad=datei.read()
        pfad=str(pfad)
        datei.close()
        os.spawnv(os.P_NOWAIT,'C:\\Programme\\Windows Media Player\\wmplayer.exe',['wmplayer.exe',pfad])
        do.close_MyRegularThread()
#Klassen, zum Starten und Beenden des Threads
class MyRegularThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)           
        global abbruch_event
        abbruch_event = threading.Event()
    def run(self):
        sleep_time = 1
        while not abbruch_event.isSet(): 
            time.sleep(sleep_time)
            checker()
    def close(self):
        abbruch_event.set()
class MyMainProgram:
    def begin_MyRegularThread(self):
        t = MyRegularThread()
        t.start()   
    def close_MyRegularThread(self):
        t = MyRegularThread()
        t.close()

Gerold hat geschrieben:2. Du solltest dir eventuell mal überlegen, auf eine aktuellere Python-Version upzudaten. :-)


Ich hatte schon mal auf Python 2.4 upgedatet, aber dann hat irgendwie nichts mehr funktioniert, also bin ich wieder auf Python 2.2 umgestiegen...

@ N317V:
Ja, ich glaube, unter Windows nennt man Daemons Dienste oder Services, oder? Dann ist es das, was ich brauche?
Ich lade gerade die Python for Windows Extensions runter, aber bei 56 K Internet dauert das eine Weile... :(

Und ich habe festgestellt, dass zwar ein Prozess begonnen wird, wenn ich das Programm indirekt (also über Python und dann F5) ausführe. Aber wenn ich das Programm mit der Konsole öffne, dann wird kein Prozess im Task-Manager angezeigt... Weiß jemand, warum das so ist?

Danke schon mal im Voraus für eure Antworten...
Roman
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon N317V » Donnerstag 30. März 2006, 08:47

Roman hat geschrieben:Hallo,
Der ist allerdings eine Konsolenanwendung, so dass man ihn nicht mit pythonwin starten sollte, oder?


Wie meinst Du das? PythonWin ist doch nur das Entwicklungswerkzeug. Dort kann man das Programm zwar auch laufen lassen, aber für den produktiven Einsatz ist das natürlich Käse. Dafür braucht man ja dann keinen Editor, Debugger etc.
Roman hat geschrieben:@ N317V:
Ja, ich glaube, unter Windows nennt man Daemons Dienste oder Services, oder? Dann ist es das, was ich brauche?

Yepp! Genau!

Roman hat geschrieben:Und ich habe festgestellt, dass zwar ein Prozess begonnen wird, wenn ich das Programm indirekt (also über Python und dann F5) ausführe. Aber wenn ich das Programm mit der Konsole öffne, dann wird kein Prozess im Task-Manager angezeigt... Weiß jemand, warum das so ist?


CMIIW: Im Taskmanager sollte so oder so nur der Python-Interpreter angezeigt werden, der das Script ja ausführt. Das Script ist kein eigener Task.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Roman » Donnerstag 30. März 2006, 09:07

Hallo,

N317V hat geschrieben:Wie meinst Du das? PythonWin ist doch nur das Entwicklungswerkzeug. Dort kann man das Programm zwar auch laufen lassen, aber für den produktiven Einsatz ist das natürlich Käse. Dafür braucht man ja dann keinen Editor, Debugger etc.


Ich meine, wenn ich das script als .pyw abspeichere, dann erscheint ja gar nicht erst die Abfrage nach der Uhrzeit... Wenn ja, dann müsste ich dann noch eine Benutzeroberfläche schreiben, oder?
Läuft es ann eigentlich über einen anderen Interpreter oder was verändert diese Endung? (Nur mal aus Interesse)
Ich dachte eigentlich immer, dass PythonWin nur für GUI Anwendungen da sei...
Aber bei mir funktioniert das irgendwie nicht! habe mal eine GUI Anwendung geschrieben, aber diese konnte ich nicht mit PYthonWin ausführen bzw. es erschien kein WIndow oder ähnliches.

N317V hat geschrieben:CMIIW: Im Taskmanager sollte so oder so nur der Python-Interpreter angezeigt werden, der das Script ja ausführt. Das Script ist kein eigener Task.


Es wird aber dann nichts Pythonmäßiges im Task-Manager angezeigt, noch nicht einmal der Interpreter. Also, wenn ich das DOS-Fenster schliesse, dann wird auch autpmatisch der Prozess abgebrochen, oder?
Wenn ja, gibt es einen Weg, das zu verhindern?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Leonidas » Donnerstag 30. März 2006, 16:24

Roman hat geschrieben:Ich meine, wenn ich das script als .pyw abspeichere, dann erscheint ja gar nicht erst die Abfrage nach der Uhrzeit... Wenn ja, dann müsste ich dann noch eine Benutzeroberfläche schreiben, oder?
Läuft es ann eigentlich über einen anderen Interpreter oder was verändert diese Endung? (Nur mal aus Interesse)

Ja, dann musst du selbst eine GUI schreiben. Aber das ist mit wxPython oder PyGTK auch nicht die Welt.

Es läuft, wenn du's so nennen willst, in einem anderen Interpreter wenn dus .pyw nennst. pyw-Dateien werden nämlich mit dem Interpreter pythonw.exe verknüpft, der das gleiche wie python.exe macht, nur eben keine Konsolenfenster aufmacht. Es spricht aber nichts dagegen .pyw-Dateien mit python.exe zu starten oder .py-Dateien mit pythonw.exe zu starten.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Roman » Freitag 31. März 2006, 05:13

Leonidas hat geschrieben:Aber das ist mit wxPython oder PyGTK auch nicht die Welt.

Das habe ich nicht ganz verstanden... :oops: Was meinst du mit wxPython oder PyGTK?
Aus irgendeinenem Grund funktioniert PythonWin nicht bei mir. Ich habe einige GUI Programme geschrieben, aber wenn ich sie mit PythonWin öffne, dann passiert gar nichts. Es wird kurz gerechnet, aber das wars dann auch schon.
Weißt du, woran das liegen könnte?
Danke für eure Antworten...
Roman
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Leonidas » Freitag 31. März 2006, 18:19

Roman hat geschrieben:
Leonidas hat geschrieben:Aber das ist mit wxPython oder PyGTK auch nicht die Welt.

Das habe ich nicht ganz verstanden... :oops: Was meinst du mit wxPython oder PyGTK?

wxWidgets und PyGTK sind Module, mit denen du GUIs machen kannst. Die funktionieren meist sehr gut.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Roman » Sonntag 2. April 2006, 04:13

Leonidas hat geschrieben:wxWidgets und PyGTK sind Module, mit denen du GUIs machen kannst. Die funktionieren meist sehr gut.

Kann ich das nicht auch mit Tkinter machen, damit komme ich besser klar.
Dann bleibt immer noch mein Problem, dass wenn ich Programme öffne, die ich mit einer GUI geschrieben habe, diese dann nicht funktionieren...
Bzw. es wird nichts angezeigt. Wenn ich diese Programme dagegen indirekt über die Shell aufrufe, dann funktioniert alles einwandfrei.

Danke für eure Hilfe :D
Roman
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Leonidas » Sonntag 2. April 2006, 11:19

Roman hat geschrieben:
Leonidas hat geschrieben:wxWidgets und PyGTK sind Module, mit denen du GUIs machen kannst. Die funktionieren meist sehr gut.

Kann ich das nicht auch mit Tkinter machen, damit komme ich besser klar.

Klar, kannst du machen.

Roman hat geschrieben:Dann bleibt immer noch mein Problem, dass wenn ich Programme öffne, die ich mit einer GUI geschrieben habe, diese dann nicht funktionieren...
Bzw. es wird nichts angezeigt. Wenn ich diese Programme dagegen indirekt über die Shell aufrufe, dann funktioniert alles einwandfrei.

Eher direkt über die Shell und indirekt über die Dateitypen-Verknüpfung ;) Hast du .py-Dateien mit python.exe und .pyw-Dateien mit pythonw.exe verknüpft?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Re: Programm ohne DOS-Fenster laufen lassen

Beitragvon Roman » Montag 3. April 2006, 11:15

Leonidas hat geschrieben:Hast du .py-Dateien mit python.exe und .pyw-Dateien mit pythonw.exe verknüpft?

Ich habe gerade gemerkt, dass in meinen GUI-Programmen überall der usingIDLE Wert auf 1 gesetzt war... :oops: Kein Wunder, dass da nichts ging! Jetzt funktioniert es auch. Trotzdem danke für eure Hilfe, dass hat mir sehr geholfen.
Eine letzte Frage hätte ich noch, in der Hoffnung euch nicht zu sehr auf die Nerven zu gehen: Eines meiner Programme enthält einen Fortschrittsbalken, den ich mit Tkinter geschrieben habe. Beim direkten (Ja, ich habe gelernt :) . Also der Aufruf über die Shell) Aufruf funktioniert das auch alles wunderbar. Aber beim indirekten Aufruf (über die Verknüpfung) wird der Balken erst am Ende des Programms gezeichnet...
Weiß da jemand einen Befehl, mit dem man dem Programm sagt, es solle jetzt sofort zeichnen?
Danke schon mal im Voraus...
Roman

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]