[python] problème sur os.popen
steph70
-
Lei00 -
Lei00 -
Bonjour,
J'ai mis en place une serie de commandes dos dans une def grace à os.popen mais j'ai un souci à l'utilisation puisque j'ai toujours le message d'erreur suivant :
Alors j'ai essayé avec des simples quotes mais sans résultat.
Pouvez vous m'aider ?
Merci beaucoup
Le programme doit a l'aide winrar mettre le fichier en autoexecutable, et ensuite à l'aide de sendemail l'envoyer à une personne.
ps : je sais qu'il y a une fonction mail dans python mais on m'a demandé de faire comme cela donc je fais comme cela :-°
Voici mon code :
<code>
# -*- coding: utf-8 -*-
# importation du cadre graphique
from Tkinter import *
# importation des commandes dos
import os
# Mise en place des définitions
def envoi ():
os.popen("cd \")
os.popen("C:\program files\winrar\")
os.popen(rar a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb")
os.popen ("C:\sendEmail-v155\sendemail.exe -f ttrit@bidule.fr -t muche@aol.com -u test -m message -s smtp.machin.fr -xp mdp")
# Mise en place de la fenêtre
fen1=Tk()
fen1.title('Envoi manuel des mails Logimet')
ent1=Label (fen1,text='mail')
ent1.grid(row=0,column=0)
bou=Button(fen1,text='Envoi',command=(lambda:envoi()))
bou.grid(row=0,column=1)
# Mise en place de la sortie du programme
entf=Label(fen1,text='Quitter le programme',fg='red')
entf.grid(row=25,column=1)
bouf=Button(fen1,text='Quitter',command=fen1.destroy)
bouf.grid(row=25,column=2)
#Déroulement du programme
fen1.mainloop()<_code>
L'erreur a priori est montrée par l'idle phyton au niveau de la parenthèse fermante de la première commande os.popen dans la def
J'ai mis en place une serie de commandes dos dans une def grace à os.popen mais j'ai un souci à l'utilisation puisque j'ai toujours le message d'erreur suivant :
there's an error in your program : EOL while scanning single-quoted string
Alors j'ai essayé avec des simples quotes mais sans résultat.
Pouvez vous m'aider ?
Merci beaucoup
Le programme doit a l'aide winrar mettre le fichier en autoexecutable, et ensuite à l'aide de sendemail l'envoyer à une personne.
ps : je sais qu'il y a une fonction mail dans python mais on m'a demandé de faire comme cela donc je fais comme cela :-°
Voici mon code :
<code>
# -*- coding: utf-8 -*-
# importation du cadre graphique
from Tkinter import *
# importation des commandes dos
import os
# Mise en place des définitions
def envoi ():
os.popen("cd \")
os.popen("C:\program files\winrar\")
os.popen(rar a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb")
os.popen ("C:\sendEmail-v155\sendemail.exe -f ttrit@bidule.fr -t muche@aol.com -u test -m message -s smtp.machin.fr -xp mdp")
# Mise en place de la fenêtre
fen1=Tk()
fen1.title('Envoi manuel des mails Logimet')
ent1=Label (fen1,text='mail')
ent1.grid(row=0,column=0)
bou=Button(fen1,text='Envoi',command=(lambda:envoi()))
bou.grid(row=0,column=1)
# Mise en place de la sortie du programme
entf=Label(fen1,text='Quitter le programme',fg='red')
entf.grid(row=25,column=1)
bouf=Button(fen1,text='Quitter',command=fen1.destroy)
bouf.grid(row=25,column=2)
#Déroulement du programme
fen1.mainloop()<_code>
L'erreur a priori est montrée par l'idle phyton au niveau de la parenthèse fermante de la première commande os.popen dans la def
12 réponses
ok, c'est bon
En fait faut rajouter un \ pour eviter que le " soit pris comme caractère d'echappement.
Par contre la ligne :
me renvoie 1 et ne s'execute pas.
Une idée ?
Merci encore pour votre aide
Amicalement
Steph70
En fait faut rajouter un \ pour eviter que le " soit pris comme caractère d'echappement.
Par contre la ligne :
os.popen(rar a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb")
me renvoie 1 et ne s'execute pas.
Une idée ?
Merci encore pour votre aide
Amicalement
Steph70
ok mais puisque j'ai quand meme besoin de cet antislash, comment outrepasser ce problème ?
merci pour votre aide
Steph70
merci pour votre aide
Steph70
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci Kilian
je viens d'essayer avec cette commande :
Et voici le resultat :
<code><open file 'c:\program files\winrar
ar.exe a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb', mode 'r' at 0x00B36920><\code>
et malheureusement pas d'execution
Amicalement
Steph70
je viens d'essayer avec cette commande :
os.popen("c:\program files\winrar\rar.exe a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb")
Et voici le resultat :
<code><open file 'c:\program files\winrar
ar.exe a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb', mode 'r' at 0x00B36920><\code>
et malheureusement pas d'execution
Amicalement
Steph70
Encore une fois merci Kilian.
Par contre, meme si je ne vois pas la commande, je devrais voir le résultat dans le dossier voulu, c'est a dire l'apparition du dossier autoextratible créer par winrar, ce qui n'est pas le cas.
C'est pour cela que je dis que la commande ne fonctionne pas meme si elle ne me renvoie pas d'erreur.
Merci encore pour ton aide
Amicalement
Steph70
Par contre, meme si je ne vois pas la commande, je devrais voir le résultat dans le dossier voulu, c'est a dire l'apparition du dossier autoextratible créer par winrar, ce qui n'est pas le cas.
C'est pour cela que je dis que la commande ne fonctionne pas meme si elle ne me renvoie pas d'erreur.
Merci encore pour ton aide
Amicalement
Steph70
Déterrons un peu le topic.
En fait la méthode "popen" du module "os" python est obsolète.
Il faut pour cela utiliser in commande "Popen" (avec une majuscule) du module "subprocess", je l'ai teste en faisant du "ssh" avec "plink" et ça marche bien.
Bon je me doute bien que ce problème à du être résolu depuis le temps mais au cas ou quelqu'un tomberait dessus, il aurais au moins une solution.
Voila le lien vers l'API Python:
http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen.stdout
et un autre pour la conversion des anciennes commandes :
http://docs.python.org/library/subprocess.html?highlight=popen#replacing-older-functions-with-the-subprocess-module
Cordialement
En fait la méthode "popen" du module "os" python est obsolète.
Il faut pour cela utiliser in commande "Popen" (avec une majuscule) du module "subprocess", je l'ai teste en faisant du "ssh" avec "plink" et ça marche bien.
Bon je me doute bien que ce problème à du être résolu depuis le temps mais au cas ou quelqu'un tomberait dessus, il aurais au moins une solution.
Voila le lien vers l'API Python:
http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen.stdout
et un autre pour la conversion des anciennes commandes :
http://docs.python.org/library/subprocess.html?highlight=popen#replacing-older-functions-with-the-subprocess-module
Cordialement
En fait popen renvoie un descripteur de fichier.
En arrière plan, le processus s'execute bin mais tu ne le vois pas.
Il faut appeler read() pour le voir:
En arrière plan, le processus s'execute bin mais tu ne le vois pas.
Il faut appeler read() pour le voir:
fd = os.popen("c:\program files\winrar\rar.exe a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb") print fd.read() fd.close()
re et encore merci
Et bien non ca ne me renvoi rien du tout.
J'ai essayé en changeant juste ma commande mais meme résultat :
Comme tu le vois, juste après le print p.read ca reste obstinément vide et rien ne se fait dans le dossier de destination alors que la commande dos identique fonctionne.
Amicalement
Lonewolf
Et bien non ca ne me renvoi rien du tout.
J'ai essayé en changeant juste ma commande mais meme résultat :
os.popen("start \"c:\program files\winrar\rar a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb\"") <open file 'start "c:\program files\winrar ar a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb"', mode 'r' at 0x00B368D8> >>> p=os.popen("start \"c:\program files\winrar\rar a -sfx c:\Logimet\BDD_Logimet c:\Logimet\BDD_Logimet.mdb\"") >>> print p.read()
Comme tu le vois, juste après le print p.read ca reste obstinément vide et rien ne se fait dans le dossier de destination alors que la commande dos identique fonctionne.
Amicalement
Lonewolf