Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Subprocess et arguments par défaut

+1 vote

Je récupère un code qui fonctionne mais je ne comprends absolument pas pourquoi.
Ce code appelle un .bat en subprocess et lui passe des arguments; le .bat appelle un .py et lui passe les arguments; le .py ne contient aucune espèce de parser d'arguments mais lance une de ses fonctions en dur avec d'autres arguments. Et ça marche... bordel.

subprocess.Popen([path_vers_mon_bat, mon_arg1, mon_arg2])

dans pathversmon_bat:

SET MAYAPY_PATH="C:\Program Files\Autodesk\Maya2015\bin\mayapy.exe"
set VAR_1 = %1
set VAR_2 = %2
%MAYAPY_PATH% path_vers_mon_py %1 %VAR_1% %2 %VAR_2%

dans pathversmon_py:

def ma_fonction_trop_bien(arg1, arg2, un_buffer):
    print('tralala')
print('debut')
ma_fonction_trop_bien('nimporte','nawak', [])
print('fin')

et donc le résultat c'est que ça lance
mafonctiontropbien(monarg1, mon_arg2, [])

Une idée?

demandé 30-Sep-2016 par furankun (1,434 points)

Quelles sont les valeurs de mon_arg1 et mon_arg2 ?

Comment es-tu sûr que ma_fonction_trop_bien est appelée avec des arguments différents, sachant qu'elle n'utilise pas leur valeur ? (et, quoiqu'il arrive, affiche tralala)

Es-tu sûr que tu n'a pas oublié un if __name__ == '__main__': ?

monarg1 et monarg2 sont des paths (donc des strings)

Là je vous ai donné un exemple, bien sûr mafonctiontrop_bien fait plein de trucs avec les fichiers dont on lui passe les paths. Et notamment j'ai un log qui me dit quelles sont les valeurs des arguments qui lui sont passés.

Oui, je suis sûr. Moi aussi ça m'a choqué mais comme je disais, c'est un code récupéré.

Peux-tu donner un exemple minimal fonctionnel ? Les codes tels que tu les a donnés ne génèrent aucun problème.

1 Réponse

+1 vote

Maya est un soft de 3d qui utilise du pyton/mel script. De ce que je comprends, le but est de faire du traitement massif de donnees 3d.

Dans maya tu peux recuperer les parametres de la ligne de commande donnees a maya via (comme dans l'interpreteur python):

import sys
sys.argv

Si dans la fonction python les parametres sont en dur. Je ne vois que le argv pour recuperer les parametres ou les arguments ne servent a rien et ton code obtient toujours le meme resultat. Faudrait voir mafonctiontropbien.

répondu 4-Oct-2016 par blue (176 points)

J'aime le nom de ce soft :)

...