2010-12-29 5 views
1

de celery.decorators tâche d'importationComment se fait-il que mon code Python ne fonctionne pas?

from celery.decorators import task 
@task() 
def add(x, y): 
    r = open("./abc.txt","w") 
    r.write("sdf") 
    r.close() 
    return x + y 

C'est mon dossier tasks.py.

>>> import tasks 
>>> r = tasks.add.delay(3,5) 
>>> r.result 
8 

Comme vous pouvez le voir, la fonction fonctionne. Toutefois, le fichier ne crée pas. Pourquoi?

J'ai essayé de changer plusieurs chemins de fichier, en raison de problèmes de permission possibles. mais pas de chance.

+0

Comment savez-vous que cela ne fonctionne pas? Que faire si vous utilisez un chemin absolu au lieu d'un chemin relatif? – Gabe

Répondre

2

Si le fichier n'était pas en cours d'écriture, vous obtiendrez une exception et la fonction ne pourra donc pas être terminée.

Puisque la fonction retourne 8, il s'ensuit que le fichier est écrit quelque part.

Peut-être que le fichier est écrit dans un répertoire différent de celui que vous attendez

La seule autre possibilité que je peux penser est que la fonction d'ajout qui est en cours d'exécution n'est pas celui que vous avez montré ici

+0

Vous pouvez utiliser 'import os; os.getcwd() 'pour savoir dans quel répertoire pense Python'. Ceci est souvent mis à quelque chose de très incommode; si je démarre Python depuis mon menu Démarrer, ce sera C: \\ Windows \\ system32'! Si je le lance depuis une fenêtre de commande, ce sera le chemin qui sera dans la fenêtre de commande quand j'ai démarré Python. –

1

Je pense que le problème est que vous l'exécutez en important un module. Le . dans le chemin d'accès du fichier est relatif à l'emplacement du module et non à votre répertoire de travail actuel. Essayez de lui donner un nom de chemin complet.

Si cela ne fonctionne pas, montrez-nous exactement d'où vous exécutez le script et ls -la dans ce répertoire. Et si cela ne montre toujours rien d'anormal. Faites un

find/-name abc.txt

1
  1. Le répertoire de travail peut ne pas être celui que vous attendez.
  2. La tâche peut être effectuée sur un autre hôte si vous utilisez plusieurs hôtes.
Questions connexes