web-dev-qa-db-fra.com

python subprocess.call () "aucun fichier ni répertoire de ce type"

J'ai trouvé quelques questions sur le module, mais le problème le plus courant semble être de bien définir la liste des arguments, ce que je pense avoir réussi (éventuellement).

J'essaie de lancer un programme qui attend une entrée comme celle-ci dans la ligne de commande,

fits2ndf in out

avec 'in' étant le chemin du fichier à convertir et 'out' le chemin et le nom du fichier dans lequel enregistrer le résultat.

Donc, en utilisant le sous-processus,

subprocess.call(["fits2ndf","/media/tom_hdd/Transfer/reference.fits","/media/tom_hdd/Transfer/reference.sdf"])

cela s'élève,

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

Le réglage de Shell=TRUE (que je sais mauvais) produit le même résultat. Pas sûr que ce soit pertinent, mais j'utilise tcsh. Aucune suggestion?


Modifier en réponse aux questions

Je n'ai pas défini de façon permanente le chemin PATH mais fits2ndf fait partie d'un paquet de programmes que j'initialise en utilisant

% tcsh
% setenv STARLINK_DIR  /home/tomq/star-kapuahi
% source $STARLINK_DIR/etc/login
% source $STARLINK_DIR/etc/cshrc

et fonctionne normalement à partir de n'importe quel répertoire sans spécifier le chemin complet.

13
user1889259

which fits2ndf va vous montrer le chemin de fits2ndf.

Après cela, vous pouvez écrire le chemin complet de votre code et cela devrait fonctionner.

Ex:

~$ which mv
/bin/mv

Mon code python:

import subprocess

subprocess.call(["/bin/mv","/tmp/a","/tmp/b"])
9
denizeren

Vous voudrez peut-être supprimer l'espace dans " /media/tom_hdd/Transfer/reference.sdf"

Aussi, essayez de tout mettre dans une chaîne, comme "fits2ndf /media/tom_hdd/Transfer/reference.fits /media/tom_hdd/Transfer/reference.sdf"

Assurez-vous de pointer dans la direction exacte.

0
Lotzki