[python] problème sur os.popen

Fermé
steph70 - 9 janv. 2009 à 19:52
 Lei00 - 1 juil. 2011 à 13:55
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 :

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 :
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
2
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
9 janv. 2009 à 19:57
Salut,

EOL = End of line

Il ne faut pas mettre d'antislash avant la guillemet fermante....
1
ok mais puisque j'ai quand meme besoin de cet antislash, comment outrepasser ce problème ?

merci pour votre aide
Steph70
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
9 janv. 2009 à 23:20
Comme ça:
os.popen("cd \"") 

Ou mieux, les triples quotes:
os.popen("""cd \""") 
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Désole kilian,

nos messages ont du se croiser.

Amicalement
Steph70
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
9 janv. 2009 à 23:39
Ah oui pardon, c'est "\\"
Pour ta commande avec rar. Essaie de mettre le chemin complet vers l'executable de rar.
0
Merci Kilian

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
1
Bonjour,

Un petit up après une bonne nuit de sommeil

Amicalement
steph70
1
Un petit up de l'après midi,

juste pour remonter un peu dans la liste.

Lol

amicalement
Steph70
1
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
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 janv. 2009 à 17:52
Ca t'affiche rien avec le read?
0
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
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
10 janv. 2009 à 14:40
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:
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()

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

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
0