IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Python 3 - os.system sous OS X 10.6


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut Python 3 - os.system sous OS X 10.6
    Bonjour,

    Je voudrai automatiser l'utilisation de la commande convert d'ImageMagick pour convertir automatiquement toutes les images d'un dossier d'un certain format, dans un autre format.

    J'ai essayé ceci, et visiblement, cela ne fonctionne pas:

    for image in os.listdir(chemin_initial):
    commande="#!/bin/sh sh convert "+chemin_initial+image+" "+chemin_initial+nom_sortie+"."+format_sortie
    os.system(commande)


    J'avais déjà utilisé la commande os.system sous Vista et Linux pour compiler des scripts bash, et tout marchait bien. Là j'avoue que je comprends pas.

    Si vous avez des idées ou déjà rencontrés cela, je suis preneur!

    Python 3.0.1 sur Mac OS-X 10.6

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Si ce n'est que j'aurais utilisé convert directement (sans "#!/bin/sh sh") qu'elle est votre erreur ? Que voulez vous dire par 'ne fonctionne pas' ?

    @+

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut
    Avec ou sans le #!bin/sh sh, le résultat est le même... rien.
    Le programme s'exécute mais ne renvoie ni erreur ni fichiers convertis.
    Lorsque je l'exécute en ligne de commande dans le shell Python, il me renvoie par contre une valeur numérique (de mémoire dans les 35000), mais pas d'erreur.

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par cckinc Voir le message
    Lorsque je l'exécute en ligne de commande dans le shell Python, il me renvoie par contre une valeur numérique (de mémoire dans les 35000), mais pas d'erreur.
    Que donne un print(commande) avent l'os.system ?

  5. #5
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    chemin_initial+image
    ou encore

    chemin_initial+nom_sortie+"."+format_sortie
    ne sont pas des chemins valides (pas de séparateur entre le nom du répertoire et le nom (simple) du fichier image. Regarde du côté de os.path.join

    De plus, la commande commençant par "#!/bin/sh sh ..." est - je n'en sais rien - peut être valide mais complétement inutile.

    os.system(commande) c'est demander au système d'executer commande, comme si on la tapait dans une fenêtre Terminal. Quand tu lances directement convert dans un terminal, tu lances "#!/bin/sh sh convert .." ? ça m'étonnerait. Là, comme tu l'écris, c'est un mille-feuilles de shells :

    • os.system : déclenchera un premier shell
    • #!/bin/sh : second shell (tu demandes que la suite soit interprétée par /bin/sh
    • sh : troisième shell



    Enfin, os.system ne te renvoie qu'un code retour. N'attends pas autre chose.

    [EDIT] mon histoire de mille-feuilles et de shells les uns à la suite des autres est, théoriquement, ce qui se passerait avec ton approche mais de toute façon, convert est un binaire et tu ne peux pas demander qu'il soit interprété par le shell donc aucune chance que ça marche ("/bin/sh convert" a autant de sens que "python convert" ...)

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    C'est bien mon avis aussi mais
    Citation Envoyé par cckinc Voir le message
    Avec ou sans le #!bin/sh sh, le résultat est le même... rien.
    Il y a aussi un string mal formé avec commande...

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut
    Un print(commande) donne bien une chaîne de caractère et la valeur souhaitée, et qui fonctionne bien lorsqu'on réalise un copier/coller dans le terminal Mac de cette commande obtenue par concaténation.

    J'ai essayé aussi en "forçant" avec un convert(str(commande)).

    Lorsque je réalise un os.system(commande de conversion) en ligne de commande, je récupère 32512 comme valeur!

    Je pense à un problème de droit, mais je vois pas pourquoi il y en aurait et surtout comment le résoudre d'autant que je suis bien en lecture/écriture/exécution pour tous les dossiers concernés.

    Ex-ubuntiste, je me suis même amusé en accolant des su et sudo dans os.system(), sans plus de résultats.

    J'ai l'impression que Python n'arrive pas à lancer le Terminal.

    Un os.popen("/Applications/Utilities/Terminal.app") en ligne de commande donne <os._wrap_close object at 0x15ac7b0>, et je sais pas comment utiliser un os.popen() en passant pour paramètre une commande à exécuter dans le Terminal.

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    os.system est remplacé par le module subprocess

    Vous pouvez utiliser la méthode call si vous avez des arguments.

    Bonne continuation...

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut
    Je rajouterai que un os.system("mkdir dossier_quelconque") me renvoie 0 lors d'une exécution en ligne de commande.

    Je creuse depuis quelques minutes la piste des problème d'écriture des chemins lors de la concaténation, mais cela ne vient pas de là je pense. Comme je l'ai dit plus haut, la commande qui s'écrit dans Python fonctionne lorsque je l'injecte à la main dans le Terminal.

    A moins qu'il n'y ait une histoire de / et \ ?

Discussions similaires

  1. appel systeme sous mandriva 2006
    Par yashiro dans le forum Linux
    Réponses: 1
    Dernier message: 12/01/2007, 15h03
  2. [C++] Comment effectuer l'appel system sous pocket pc ?
    Par Startux dans le forum Windows Mobile
    Réponses: 8
    Dernier message: 20/07/2006, 10h43
  3. Tuer un processus lance par system sous perl
    Par gedeon555 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 17h11
  4. Programmation systeme sous Unix
    Par Premium dans le forum Linux
    Réponses: 9
    Dernier message: 11/03/2006, 09h40
  5. [Kylix] pb avec le Libc.system sous redhat
    Par zheng dans le forum EDI
    Réponses: 1
    Dernier message: 15/07/2004, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo