Seite 1 von 1

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

Verfasst: Dienstag 8. Mai 2012, 19:15
von JR
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

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Mittwoch 9. Mai 2012, 20:28
von Sr4l
Hallo JR,
sei doch bitte mal etwas konkreter was <command> ist.
Ist es den nötig das über "cmd /c" aufzurufen?

mfG
Lars

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Mittwoch 9. Mai 2012, 21:30
von darktrym
JR hat geschrieben: Wie verhindere ich bloß dieses nervige DOS-Fenster??
Indem du kein cmd benutzt?!

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Donnerstag 10. Mai 2012, 08:22
von mkesper

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Donnerstag 10. Mai 2012, 14:23
von JR
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.

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Donnerstag 10. Mai 2012, 16:21
von Sr4l
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

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Donnerstag 10. Mai 2012, 16:28
von JR
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

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Donnerstag 10. Mai 2012, 16:36
von Dav1d
Unter Linux kannst du das Shebang anpassen: http://en.wikipedia.org/wiki/Shebang_(Unix)

Re: Verknüpfung zu skript.py(w) öffnet DOS Fenster trotz pyt

Verfasst: Donnerstag 10. Mai 2012, 16:39
von Sr4l
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.