Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pythonw

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
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hallo liebe Python-Gemeinde!

Nach wirklich vielen Stdn googlen flippe ich bald aus :roll:

Ich habe ein Pythonskript als "Wrapper" zum Starten einer IDE mit

Code: Alles auswählen

Popen( [ 'cmd', '/C', <command> ], stdout = PIPE ).wait()
Zu diesem Skript habe ich unter Windoof eine Verknüpfung auf den Desktop gezogen.
Egal, ob ich über die Verknüpfungseigenschaften mit pythonw.exe oder python.exe arbeite,
immer poppt das DOS Fenster auf. Ich kann es zwar weg drücken und die IDE bleibt offen,
doch nach dem .wait() - sprich dem Schließen der IDE - soll das Skript noch weiter arbeiten.

Wie verhindere ich bloß dieses nervige DOS-Fenster??

Ich hoffe sehr, jemand weiß einen Rat, da ich das Problem schon mehrmals angegangen und
nie gelöst bekommen habe :oops:

Es grüßt JR aus HH
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Hallo JR,
sei doch bitte mal etwas konkreter was <command> ist.
Ist es den nötig das über "cmd /c" aufzurufen?

mfG
Lars
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

JR hat geschrieben: Wie verhindere ich bloß dieses nervige DOS-Fenster??
Indem du kein cmd benutzt?!
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hallo darktrym, mkesper und Sr4l!

Entschuldigt, ich hätte gleich detaillierter beschreiben sollen.
Dies nun hier mit der von euch empfohlenen Anpassung,
dass cmd innerhalb des Skriptes nicht benutzt wird,
doch das Problem bekomme ich nicht gelöst:

Pythonskript namens "launch.pyw" zur Ausführung (hier) unter WinXP:

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
from subprocess import Popen, PIPE
if __name__ == '__main__':
    qtcreatorDir = 'C:/JR/Development/IDEs/qtcreator-nt/bin'
    qtcreatorPath = qtcreatorDir + os.path.sep + 'qtcreator.exe'
    settingsDir = 'C:/JR/Development/IDEs/qtcreator-nt/configJR'
    Popen( [ qtcreatorPath, '-lastsession', '-settingspath', settingsDir ], cwd = qtcreatorDir, env = os.environ, stdout = PIPE ).wait()
Doppelklick auf launch.pyw oder auch eine Verknüpfung davon ist toll, da kein DOS-Fenster erscheint.

Nun habe ich aber mehrere Pythonversionen (auch < 3.X) installiert und muss
das obige Skript mit einer Pythonversion >= 3.X starten.

Daher erstelle ich unter WinXP eine Verknüpfung zum Pythonskript launch.pyw, öffne die Eigenschaften der Verknüpfung
und trage unter Verknüpfung -> Ziel das Folgende ein:

Code: Alles auswählen

C:\Python32\python.exe C:\<...>\launch.pyw
Und schwupps, kommt das (im aktuellen Fall) doofe DOS-Fenster :shock:

Was kann da verbessert werden?

Kind regards
JR

P.S.: Das Skript wird unter verschiedenen System eingesetzt, so dass ich im Skript header, keinen Pfad zu einem installierten Interpreter angeben kann.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Du Verknüpfst nicht auf
C:\Python32\python.exe C:\<...>\launch.pyw
sondern auf:
C:\Python32\pythonw.exe C:\<...>\launch.pyw
Denn die Dateiendung wird nicht beachtet wenn die Datei als Argument aufgerufen wird, das ist eine reine Windows Sache welche Dateiendung welchem Programm zugeordnet ist.

Hinweis: du könntest dir eigene Dateiendungen festlegen. z.B .py2 auf Python27/python.exe, und .pyw2 auf Python27/pythonw.exe

Edit:
qtcreatorPath = qtcreatorDir + os.path.sep + 'qtcreator.exe'
kannst du auch schöner schreiben mit:

Code: Alles auswählen

qtcreatorPath = os.path.join(qtcreatorDir, 'qtcreator.exe')
mfG
Lars
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hey great success!

Vielen Dank, auch für den Tip mit den Dateiextensionen.

Letztlich benutze ich Version 2.7 wegen einem LaTeX-Plugin in Inkscape,
welches mit Version >=3 nicht läuft ohne komplett überarbeitet zu werden.

Weißt du zufällig, ob ich unter Linux ebenso /usr/bin/python2.7 bzw. /usr/bin/python3
jweils passenden Extensionen zuordnen kann und wenn ja, wie?

Ist vielelicht eine Offtopic-Frage, doch sicher wird es noch einen anderen
Leser geben, der sich freut, dass zu entdecken! :)

Vg
JR
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Unter Linux kannst du das Shebang anpassen: http://en.wikipedia.org/wiki/Shebang_(Unix)
the more they change the more they stay the same
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Also XFCE, Unity und Co bieten selbige Funktion wie Windows "öffnen mit". Bei Unity heißt es z.B "mit einer anderen Anwendung öffnen ...". Da kannst du natürlich auch einer unbekannten Dateiendung die befehle python2 bzw python3 zuordnen oder das was du schon machts "#!/usr/bin/env python3" in die erste Zeile feuern, was der bessere Weg ist.

Ich muss sagen das ich das Problem nicht habe, da ich immer noch bei Python 2.7 hänge, was sich auch nicht ändern wird bis Debians standard Python Version von libapache2-mod_wsgi und ein paar anderen auf Python 3 setzt.
Antworten