Drag'n drop im Windows Explorer auf Python-Scripte

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
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Hi,

vielleicht kann mir hier jemand helfen:

Wenn ich im Windows Explorer eine Datei auf eine mit py2exe erstellte exe ziehe, wird die Datei mitsammt Pfad als sys.argv[1] übergeben.

Kann ich das gleiche Verhalten für einfache Python-Scripte erzielen, also wenn ich eine Datei auf script.py ziehe?

Es scheint mir die einfachste Art, Pfad+Datei an ein Script zu übergeben, aber jedesmal mit py2exe umwandeln ist dann doch etwas übertrieben. Momentan nehm ich den Umweg über die Shell, aber wenn es auch in der GUI geht wäre es noch etwas einfacher :)

Danke,

Sören
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

hast du es denn schon ausprobiert?
das wäre das zeitschonenste, ich habe kein windows ;-)
http://www.cs.unm.edu/~dlchao/flake/doom/
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

lol, ja hab ich. Sonst wüsste ich ja nicht, dass es bei einer exe geht, bei einer py nicht.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Kann ich das gleiche Verhalten für einfache Python-Scripte erzielen, also wenn ich eine Datei auf script.py ziehe?
das ist nicht eindeutig. sry, dass ich nicht deinen namen gelesen habe, einige leute, die ihren ersten post senden, fragen solche uä fragen ;-)
http://www.cs.unm.edu/~dlchao/flake/doom/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nirven hat geschrieben:lol, ja hab ich. Sonst wüsste ich ja nicht, dass es bei einer exe geht, bei einer py nicht.
Wie seiht sys.argv aus, wenn du eine Datei auf ein python-Script schiebst?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Leonidas hat geschrieben:Wie seiht sys.argv aus, wenn du eine Datei auf ein python-Script schiebst?
Hi!

Es kommt gar nich so weit, dass das Python-Programm gestartet wird. Ich habe das eben mal ausprobiert. Schiebt man per Drag & Drop eine Datei über eine Datei mit den Endungen ".EXE;.CMD;.BAT;.VBS...", dann wird das jeweilige Programm ausgeführt. Schiebt man eine Datei über das Icon einer Datei mit der Endung ".PY", dann passiert gar nichts. Nicht einmal das Drag-Symbol tauch auf. So wie es aussieht, blockiert Windows XP und nicht Python. Ändert man die Endung nach "EXE", dann würde das Skript ausgeführt werden. -- Aber das gibt natürlich Fehlermeldungen :-)

Also müsste es im Windows irgendwo (wahrscheinlich irgendwo in der Registry versteckt) eine Einstellung geben, die man finden und korrekt einstellen muss.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Öhm, sorry. Ja, mein Problem ist eher Windows als Python. Deswegen nur die wage Hoffnung, das hier trotzdem jemand Rat weiß, denn im Netz habe ich nichts dazu gefunden.

Und was nutzt mir mein Klicki-Bunti-XP, wenn die GUI nicht mal soetwas unterstützt? Mein Kollege wollte mir gar nicht glauben, dass es nicht geht. Dann benutz ich erstmal weiter die shell.
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

*.py Dateien sind "Dokumente", keine ausführbaren Dateien. Dass sie bei Doppelklick gestartet werden, liegt halt daran, dass sie mit python.exe (oder wie das executable auch immer heißt) verknüpft sind. Auf nen Dokument kann man nichts ziehen bei Windows.

Auf ein Batchfile als wrapper allerdings schon. Dort einfach argv an den Aufruf von python.exe dateiname.py anhängen...

(ja, kranke Wel.. äh Windows)
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich weiß nicht mehr genau, aber ich glaube, dass es bei Windows XP unter den Umgebungsvariablen eine gab, wo .VBS;.CMD;.BAT;usw eingetragen war. Vielleicht würde es helfen .PY dort anzuhängen?

Ist natürlich nur so eine Hypothese von mir.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Leonidas hat geschrieben:Vielleicht würde es helfen .PY dort anzuhängen?
Hi Leonidas!

Leider -- das bringt nichts. Das habe ich schon ausprobiert.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Monk
User
Beiträge: 16
Registriert: Montag 28. August 2006, 11:27

Hallo

Du bräuchtest dafür einen Drophandler. Sowas zu schreiben ist aber schwierig (Windows-Shellerweiterung).

Workaround wäre ein .cmd-Skript, dass Dein Python-Skript dann mit den übergebenen Parametern aufruft:

Code: Alles auswählen

START PYTHONW.EXE pyskript.py %*
-Monk
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Danke für eure Antworten.

Mit dem cmd-Skript funktioniert es aus der Kommandozeile, aus dem Explorer leider nicht (ich vermute ein Pfad-Problem).

Da es mit dem Batchfile aber ohne Probleme funktioniert bin ich zu faul, mich darum zu kümmern. Nicht perfekt die Lösung (dummes Windows), aber sehr nah dran, danke nochmal. Das spart Zeit und Nerven :)
Actimehl
User
Beiträge: 6
Registriert: Donnerstag 7. September 2006, 14:37

Hab eine Lösung gefunden.

Einfach das in eine .reg-Datei einfügen, das verpasst Pythondateien den .exe Drophandler
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\Python.NoConFile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"
//edit: Funktioniert jetzt für alle Endungen (.py .pyc und .pyw)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Actimehl hat geschrieben:Einfach das in eine .reg-Datei einfügen, das verpasst Pythondateien den .exe Drophandler
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\Python.NoConFile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"
Vielleicht wäre es mal schau, das an MvL weiterzuleiten, so dass er das in den Windows-Installer hinzufügen kann? Dann funktioniert es out-of-the-box.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich mach sowas einfach mit einer kleinen Batch Datei... Wie z.B. das hier:

Code: Alles auswählen

python %~dp0\md5sum_calc.py %*
@echo pause...
@ping localhost>NUL
Die Batchdatei ist dabei im selben Verzeichnis wie das Skript, also in dem Falle md5sum_calc.py... In dem Beispiel muß die python.exe im Pfad sein, aber man kann ja auch den Pfad in der CMD angeben ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

ach ja... tolle windozewelt... nichtmal bestimmen, welche dateien ausfuehrbar sind und welche nicht, darf der user dort ohne umstaende.

naja, die registry-loesung ist sicher schick. ich wuerde aber (wenn es in den installer eingebaut werden soll) empfehlen, die option mit einem haekchen zu versehen, so dass man sie bei der Installation deaktivieren kann.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

nkoehring hat geschrieben:ich wuerde aber (wenn es in den installer eingebaut werden soll) empfehlen, die option mit einem haekchen zu versehen, so dass man sie bei der Installation deaktivieren kann.
Warum? Soweit ich mich erinnern kann, bindet der Installer auch .py-Dateien an Python, was eigentlich auch nicht schadet. Höchstens wenn man mehrere Python-Versionen gleichzeitig installiert hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten