Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/07/2015, à 22:50

PengouinPdt

Python: shutil.copyfile copie le fichier - size 0b

Bonsoir,

Soit le code suivant :

config['file'] = os.path.join(os.path.expanduser("~"), '.config/Pixup/pixup.conf')
self.dir = os.path.dirname(os.path.abspath(sys.argv[0]))

dst = os.path.dirname(config['file'])
src = os.path.join(self.dir, 'conf', 'pixup.conf')

if not os.path.isdir(dst):
    os.makedirs(dst)

print 'src: %s ' % src
shutil.copyfile(src, config['file'])

Le fichier source n'est pas plein, a une taille de 777 octets.
La copie me fait un fichier vide !

Hors, quand je fais dans la console python, cela fonctionne correct :

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import os.path
>>> import shutil
>>> dst = os.path.join(os.path.expanduser('~'),'.config/Pixup/pixup.conf')
>>> src = '/home/user/Documents/Programmation/PixUP/conf/pixup.conf'
>>> shutil.copyfile(src, dst)

Pourquoi se fait-elle correctement et pas dans mon script ?

Dernière modification par PengouinPdt (Le 05/07/2015, à 07:31)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#2 Le 05/07/2015, à 06:15

pingouinux

Re : Python: shutil.copyfile copie le fichier - size 0b

Bonjour,
Déjà, ce n'est pas os.mkdirs, mais os.mkdir.
L'impression de src dans le premier cas est-elle correcte ?

Hors ligne

#3 Le 05/07/2015, à 07:30

PengouinPdt

Re : Python: shutil.copyfile copie le fichier - size 0b

@pingouinux: https://docs.python.org/2/library/os.html#os.makedirs <= stp, vérifie tes infos ... c'est sympa que tu veuilles m'aider, mais ne soit pas si affirmatif ;-)

print 'src: %s ; dir dst: %s' % (src,dst)
print 'dst: %s ' % self.config['file']

Nous restitue :

src: /home/user/Documents/Programmation/PixUP/conf/pixup.conf ; dir dst: /home/user/.config/Pixup
dst: /home/user/.config/Pixup/pixup.conf 

Dernière modification par PengouinPdt (Le 05/07/2015, à 10:33)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#4 Le 05/07/2015, à 07:58

pingouinux

Re : Python: shutil.copyfile copie le fichier - size 0b

Au temps pour moi, j'avais lu mkdirs, qui n'existe pas, mais makedirs existe effectivement.
N'y a-t-il pas une incohérence entre /home/user et /home/zou ?

Hors ligne

#5 Le 05/07/2015, à 08:57

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

pingouinux a écrit :

N'y a-t-il pas une incohérence entre /home/user et /home/zou ?

À mon avis il voulait nous cacher son nom d'utilisateur mais il a oublié de le faire partout tongue

Hors ligne

#6 Le 05/07/2015, à 08:57

Gaara

Re : Python: shutil.copyfile copie le fichier - size 0b

Salut,
tu peux essayer copy2

>>> import shutil
>>> dst = os.path.join(os.path.expanduser('~'),'.config/Pixup/pixup.conf')
>>> src = '/home/user/Documents/Programmation/PixUP/conf/pixup.conf'
>>> shutil.copy2(src, dst)

Edit:
ou ça, (si j'ai bien compris ton code)

>>> import os
>>> import shutil
>>> home = os.getenv("HOME")
>>> dst = home + '/.config/Pixup/pixup.conf'
>>> src = home + '/Documents/Programmation/PixUP/conf/pixup.conf'
>>> shutil.copy2(src, dst)

Dernière modification par Gaara (Le 05/07/2015, à 09:11)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#7 Le 05/07/2015, à 08:59

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

PengouinPdt: tu ne nous montres pas ton code complet et ça se voit ("config['file']" sous-entendant que tu as un dictionnaire qui contient des trucs de config, puis "self.config[...]" qui nous montre que tu es dans une classe..).

Première chose à faire pour déboguer une situation comme ça : reproduire le problème dans un fichier python indépendant aussi simple que possible.

Hors ligne

#8 Le 05/07/2015, à 09:01

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

Gaara: il rencontre un problème avec une fonction qui ne devrait poser aucun problème, du coup tu lui proposes une autre fonction ? Je suis totalement en désaccord avec cette idée de proposer comme solution d'utiliser autre chose, alors que même le problème est probablement dans son code à lui.

Hors ligne

#9 Le 05/07/2015, à 09:06

Gaara

Re : Python: shutil.copyfile copie le fichier - size 0b

@tiramiseb: oui, tu as probablement raison, mais je n'ai eu aucun soucis avec copy2. Donc effectivement, si copy2 ne fonctionne pas, ça vient d'autre part!
(j'ai édité mon premier message pour proposer une alternative à ses chemins)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#10 Le 05/07/2015, à 10:43

PengouinPdt

Re : Python: shutil.copyfile copie le fichier - size 0b

tiramiseb a écrit :

(...)
À mon avis il voulait nous cacher son nom d'utilisateur mais il a oublié de le faire partout tongue

Bien vu, tiramiseb. (ainsi que pour avoir compris le contexte de classe)

Tu veux le code, y'a aucun problème, c'est déjà sur mon github, et tout particulièrement le fichier suivant pixup.py ;-)
Quand tu l'auras pleinement analysé, tu te rendras compte, que j'ai vraiment donné l'essentiel !
le code incriminé est en lignes 296 à 302 ;-)

@Gaara: tiramiseb a raison, dans son raisonnement  ... me restituer shutil.copy2 ne répond pas au problème que je soulève ;-)
D'autant que je ne pense pas - à moins de me tromper - que la copie de métadonnées dans le contexte d'un fichier ASCII soit d'une prime importance, voire nécessité.

En tout cas, merci à tous de m'aider, et de se pencher sur le problème big_smile

Dernière modification par PengouinPdt (Le 05/07/2015, à 10:45)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#11 Le 05/07/2015, à 11:01

Gaara

Re : Python: shutil.copyfile copie le fichier - size 0b

Ok ! J'aurais essayé ! tongue


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#12 Le 05/07/2015, à 11:07

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

Bon, j'ai fait ce que tu n'as pas fait : isoler ce code dans un fichier indépendant.

test.py :

import os
import os.path
import shutil
import sys


self_config_file = os.path.join(os.path.expanduser("~"), '.config/Pixup/pixup.conf')
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))

dst = os.path.dirname(self_config_file)
src = os.path.join(self_dir, 'conf', 'pixup.conf')

print '==>{}<=='.format(src)
print '-->{}<--'.format(dst)
if not os.path.isdir(dst):
    os.makedirs(dst)

shutil.copyfile(src, self_config_file)

Chez moi, ça marche :

➜  test_PengouinPdt  mkdir conf
➜  test_PengouinPdt  echo "plop" > conf/pixup.conf
➜  test_PengouinPdt  python test.py
==>/home/sebastien/Sandbox/test_PengouinPdt/conf/pixup.conf<==
-->/home/sebastien/.config/Pixup<--
➜  test_PengouinPdt  cat ~/.config/Pixup/pixup.conf
plop

Donc STP teste ce code chez toi. Si ça marche (ce qui sera à mon avis le cas), alors le problème est ailleurs dans ton code.

Hors ligne

#13 Le 05/07/2015, à 11:08

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

Deux remarques sur ton code :
1/ si tu importes os, tu n'as pas besoin d'importer os.path
2/ à mon sens, avec os.path.join il vaut mieux décomposer complètement ton path, en ne gardant pas les "/" dans la chaîne. mais bon, ce n'est pas obligatoire non plus, je suis un peu extrêmiste sur ce genre de questions tongue

Dernière modification par tiramiseb (Le 05/07/2015, à 11:10)

Hors ligne

#14 Le 05/07/2015, à 12:31

PengouinPdt

Re : Python: shutil.copyfile copie le fichier - size 0b

tiramiseb a écrit :

(...)
Donc STP teste ce code chez toi. Si ça marche (ce qui sera à mon avis le cas), alors le problème est ailleurs dans ton code.

Testé et fonctionnel !!!
Grrr...

C'est quoi ce délire !!!

Concernant ta remarque à-propos de os.path.join, je suis assez d'accord avec toi ... ;-)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#15 Le 05/07/2015, à 12:35

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

Il faut donc que tu regardes dans quel contexte ce code est exécuté dans ta classe machin truc, pour comprendre ce qu'il y a de différent (problème de cwd ? problème de droits ? problème de path ?)

Hors ligne

#16 Le 05/07/2015, à 12:45

PengouinPdt

Re : Python: shutil.copyfile copie le fichier - size 0b

Ahhh, j'ai un début de réponse ...
Et, non, contrairement à ce que je croyais, mon shutil.copyfile fonctionne bel et bien ...

C'est la méthode suivante tool.set_cfg_file qui me fout le bazar !!!
Donc, maintenant en phase de correction ...

Comme quoi, les évidences ... même là, faut que je m'en méfie ... tsss
Merci.


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#17 Le 05/07/2015, à 12:49

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

pixup.py a écrit :
        tool = tools.Tools(attrs)

C'est quoi ce délire ? Il est défini où ce "tools" ?

Hors ligne

#18 Le 05/07/2015, à 14:01

PengouinPdt

Re : Python: shutil.copyfile copie le fichier - size 0b

Ahahhh ... cf, la méthode auto_loader qui se charge de l'import dynamique des scripts résidents dans le répertoire modules ;-)

Dernière modification par PengouinPdt (Le 05/07/2015, à 14:01)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#19 Le 05/07/2015, à 14:14

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

Houla crado !

N'utilise pas tel quel dans le code un module qui aura été chargé de manière dynamique. Si c'est un truc indispensable (et là, ça l'est) alors fais un "import" classique...

Hors ligne

#20 Le 05/07/2015, à 14:16

tiramiseb

Re : Python: shutil.copyfile copie le fichier - size 0b

Et c'est quoi ce réinventage de roue ?

Si tu gères un fichier de config, utilise ConfigParser !

Hors ligne

#21 Le 06/07/2015, à 13:10

PengouinPdt

Re : Python: shutil.copyfile copie le fichier - size 0b

Merci pour l'astuce ConfigParser ... sauf que galère à gérer le fichier de config - utilisé par la version Bash !!!
Sinon, c'est vrai que c'est vraiment pratique, je trouve cela excellent !

big_smile

Dernière modification par PengouinPdt (Le 06/07/2015, à 13:30)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne