#1 Le 04/07/2015, à 21: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, à 06:31)
Hors ligne
#2 Le 05/07/2015, à 05: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, à 06: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, à 09:33)
Hors ligne
#4 Le 05/07/2015, à 06: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, à 07:57
- tiramiseb
Re : Python: shutil.copyfile copie le fichier - size 0b
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
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 05/07/2015, à 07: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, à 08: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, à 07: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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#8 Le 05/07/2015, à 08: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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 05/07/2015, à 08: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, à 09:43
- PengouinPdt
Re : Python: shutil.copyfile copie le fichier - size 0b
(...)
À mon avis il voulait nous cacher son nom d'utilisateur mais il a oublié de le faire partout
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
Dernière modification par PengouinPdt (Le 05/07/2015, à 09:45)
Hors ligne
#11 Le 05/07/2015, à 10:01
- Gaara
Re : Python: shutil.copyfile copie le fichier - size 0b
Ok ! J'aurais essayé !
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, à 10: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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#13 Le 05/07/2015, à 10: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
Dernière modification par tiramiseb (Le 05/07/2015, à 10:10)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#14 Le 05/07/2015, à 11:31
- PengouinPdt
Re : Python: shutil.copyfile copie le fichier - size 0b
(...)
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 ... ;-)
Hors ligne
#15 Le 05/07/2015, à 11: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 ?)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#16 Le 05/07/2015, à 11: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.
Hors ligne
#17 Le 05/07/2015, à 11:49
- tiramiseb
Re : Python: shutil.copyfile copie le fichier - size 0b
tool = tools.Tools(attrs)
C'est quoi ce délire ? Il est défini où ce "tools" ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#18 Le 05/07/2015, à 13: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, à 13:01)
Hors ligne
#19 Le 05/07/2015, à 13: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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#20 Le 05/07/2015, à 13: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 !
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#21 Le 06/07/2015, à 12: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 !
Dernière modification par PengouinPdt (Le 06/07/2015, à 12:30)
Hors ligne