Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Win] Associer un type de fichier à un script .pyw

10 réponses
Avatar
Franck Pommereau
Bonjour,

Sous Windows, j'ai écrit un script Python pour simplifier la conversion
.flv vers .mpg et .mp3 (avec ffmpeg). J'ai sauvé ce script sous
l'extension .pyw (pour éviter la console) et j'ai associé l'extension
.flv à mon script.

Quand je double-clic sur un fichier .flv, j'ai une erreur qui me dit que
le programme "fichier.flv" n'est pas une application Win32 valide. Je
suis d'accord mais Win32 était supposé lancer "script.pyw" et non son
argument.

J'ai vérifié, j'ai bien bien .py et .pyw dans la variable PATHEXT.

J'ai aussi essayé avec py2exe, tout va bien pour l'exécution mais les
arguments sont coupés en morceaux selon les espaces. Par exemple,
sys.argv vaudra ["C:\Documents", "and", "Settings\Mon",
"Utilisateur\Bureau\Mon", "Fichier.flv"]

J'ai essayé avec py2cmd mais il ne transmet pas les arguments...

Quelle est la bonne façon de m'y prendre ? Est-il possible que cette
chose si simple sous Unix devienne si compliquée sous Windows ?

Merci d'avance de votre aide,
Franck

10 réponses

Avatar
Méta-MCI \(MVP\)
Bonsoir !

Il faut simplement associer l'extension .pyw à un programme exécutable. Par exemple à
C:Python25pythonw.exe script.pyw
(au passage, l'utilisation de pythonw.exe dispense d'utiliser l'extension .pyw)

Quelques autres possibilités :
- définir un batch, et associer l'extension à ce batch
- utiliser une ligne de commande basée sur cmd /c...
- utiliser une ligne de commande basée sur start... (qui permet, entre autres, de lancer un
fichier, par son appli associée)
- utiliser le petit lanceur .exe de Effbot
- utiliser l'utilitaire RunAs.exe (sur mon site) ; à ne pas confondre avec la commande RunAs de
windows. Cet utilitaire permet, en plus, de lancer le script sous un autre compte (Admin, etc.)

@-salutations

Michel Claveau
Avatar
Franck Pommereau
Il faut simplement associer l'extension .pyw à un programme
exécutable. Par exemple à
C:Python25pythonw.exe script.pyw
(au passage, l'utilisation de pythonw.exe dispense d'utiliser
l'extension .pyw)


C'est ce que j'imaginais et donc ce que j'ai fait : les fichiers .pyw
sont ouverts par pythonw.exe et les .py par python.exe.
Mais ça ne marche pas.

- définir un batch, et associer l'extension à ce batch


J'y ai pensé mais je ne sais pas comment transmettre les paramètres du
.bat vers le .py.

- utiliser le petit lanceur .exe de Effbot
- utiliser l'utilitaire RunAs.exe (sur mon site) ; à ne pas confondre
avec la commande RunAs de windows. Cet utilitaire permet, en plus, de
lancer le script sous un autre compte (Admin, etc.)


Après un rapide coup d'oeil, je vois mal comment m'en sortir avec ça.
RunAd demande un paramètre et dans mon cas ce serait le fichier à
traiter, quant à Effbot... pas assez de doc pour que je voies à quoi ça
sert.

Mais dans tous ces cas (.bat, lanceur, etc.) j'ai l'impression que je
fais compliqué alors que ça devrait être simple !

Franck

Avatar
Laurent Pointal
MVP a proposé l'idée suivante:
- définir un batch, et associer l'extension à ce batch


J'y ai pensé mais je ne sais pas comment transmettre les paramètres du
..bat vers le .py.


@echo off
c:python25pythonw.exe c:pathversmonscriptmonscript.pyw %1 %2 %3

(etc... jusqu'à %9 si tu en as besoin)


Avatar
Méta-MCI \(MVP\)
Re !

C'est ce que j'imaginais et donc ce que j'ai fait : les fichiers .pyw sont ouverts par pythonw.exe
et les .py par python.exe. Mais ça ne marche pas.


Ce n'est pas ce que j'ai suggéré. En faisant ça, tu vas utiliser une association d'association.
Ce qu'il faut faire, c'est associer pythonw.exe (avec le script en paramètre) à flv.

Sinon, le batch de Laurent Pointal est une excellent manière de procéder.

@+

MCI

Avatar
Méta-MCI \(MVP\)
Bonjour !

Je ne sais pas si tu l'as fait exprès, mais sais-tu que ton batch supportera le drag & drop et le
copier/coller.
Par exemple, il suffit de le mettre en icône sur le bureau. Ensuite, à partir de l'explorateur,
clic-droit+copier un fichier, suivi de clic-droit+coller sur l'icone. Cela lancera Python et le
script, avec le nom du/des fichiers en argument(s) (paramètre).

@+

MCI
Avatar
Laurent Pointal
Bonjour !

Je ne sais pas si tu l'as fait exprès,


Non, je pensais juste à l'association extension -> exécutable de Windows.

mais sais-tu que ton batch
supportera le drag & drop et le copier/coller.
Par exemple, il suffit de le mettre en icône sur le bureau. Ensuite, à
partir de l'explorateur, clic-droit+copier un fichier, suivi de
clic-droit+coller sur l'icone. Cela lancera Python et le script, avec le
nom du/des fichiers en argument(s) (paramètre).


Un candidat pour mettre ça dans le wiki ?



@+

MCI




Avatar
Franck Pommereau
@echo off
c:python25pythonw.exe c:pathversmonscriptmonscript.pyw %1 %2 %3

(etc... jusqu'à %9 si tu en as besoin)


Et il n'y aura pas de problème avec les espaces dans les noms de
fichiers, ne dois-je pas mettre "%1", etc. ?

En tout cas, j'ai réussi à trouver une solution directe. Dans le shell
(enfin... cmd.exe) je tape :

assoc .flv=Flv.Video

ftype Flv.Video=C:Chemin vers pythonw.exe "C:Chemin vers script.pyw"
"%1" %*

(La deuxième commande sur une seule ligne.)

Puis dans l'interface graphique, je change l'association de l'extension
.flv, là, il me propose "pythonw" et c'est ce que je choisis.

Maintenant ça marche. (Mais je pense que le %* est douteux, et de toute
façon ne servira jamais...)

Vive la ligne de commande ! :-)

En tout cas merci pour ces indications qui me seront sûrement utiles
pour une autre fois.

Franck

Avatar
Laurent Pointal
@echo off
c:python25pythonw.exe c:pathversmonscriptmonscript.pyw %1 %2 %3

(etc... jusqu'à %9 si tu en as besoin)


Et il n'y aura pas de problème avec les espaces dans les noms de
fichiers, ne dois-je pas mettre "%1", etc. ?


Ca serait mieux, en effet.


Avatar
Méta-MCI \(MVP\)
Bonjour !

Et il n'y aura pas de problème avec les espaces dans les noms de fichiers, ne dois-je pas mettre
"%1", etc. ?


Non ; car :
- si on utilise du copier/coller, Windows aura déjà ajouté les guillemets (") dans %1
- si on travaille en invite de commande, soit l'utilisateur utilise les guillemets (ils seront dans
%1), soit il les a oubliés, et alors, les différentes parties seront dispatchées dans %1 %2 %3 ...
il faut alors utiliser "%*"

@-salutations

Michel Claveau

Avatar
Franck Pommereau
- si on utilise du copier/coller, Windows aura déjà ajouté les
guillemets (") dans %1
- si on travaille en invite de commande, soit l'utilisateur utilise les
guillemets (ils seront dans %1), soit il les a oubliés, et alors, les
différentes parties seront dispatchées dans %1 %2 %3 ... il faut alors
utiliser "%*"


Bref, c'est compliqué partout les noms de fichiers à espaces. :-)

Merci à vous deux pour ces éclaircissements,
Franck