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

Freitag 13. Oktober 2006, 15:23

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:

Freitag 13. Oktober 2006, 15:26

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

Freitag 13. Oktober 2006, 15:41

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:

Freitag 13. Oktober 2006, 15:43

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 13. Oktober 2006, 16:44

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 Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 13. Oktober 2006, 21:35

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

Freitag 13. Oktober 2006, 22:18

Ö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:

Freitag 13. Oktober 2006, 22:35

*.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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 14. Oktober 2006, 11:46

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 Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 14. Oktober 2006, 12:28

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

Montag 16. Oktober 2006, 13:44

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

Montag 16. Oktober 2006, 15:11

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

Freitag 9. Februar 2007, 10:54

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 9. Februar 2007, 16:54

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 9. Februar 2007, 17:19

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 ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten