Question

J'ai un script python qui imprime une longue liste via R statistique (par PypeR).Ce script python fonctionne parfaitement.

Maintenant, j'essaie d'exécuter ce script depuis NodeJS via la fonctionnalité de génération de child_process mais il échoue avec l'erreur suivante : -

Traceback (most recent call last):
  File "pyper_sample.py", line 5, in <module>
    r=R()

  File "/home/mehtam/pyper.py", line 582, in __init__
    'prog' : Popen(RCMD, stdin=PIPE, stdout=PIPE, stderr=return_err and _STDOUT or childstderr, startupinfo=info), 
  File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__

    errread, errwrite)
  File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child

    raise child_exception
OSError: [Errno 2] No such file or directory

./temp.sh: line 1: 27500 Segmentation fault      (core dumped) python pyper_sample.py o1dn01.tsv cpu_overall

child process exited with code : 139

Note:Mon script python fonctionne parfaitement.Je l'ai déjà testé manuellement.

Était-ce utile?

La solution

Mon script python fonctionne parfaitement.Je l'ai déjà testé manuellement.

Le résultat montre clairement que OSError: No such file or directory une exception s'est produite pendant Popen() appel.

Cela signifie que le programme n'est pas trouvé, par exemple :

>>> from subprocess import Popen
>>> p = Popen(["ls", "-l"]) # OK
>>> total 0

>>> p = Popen(["no-such-program-in-current-path"])  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  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

De plus, transmettre la commande entière sous forme de chaîne au lieu d'une liste (shell=False par défaut) est une erreur courante :

>>> p = Popen("ls -l")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  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

S'assurer:

  • votre programme (enfant) se trouve dans le courant $PATH
  • utiliser un argument de liste au lieu d'une chaîne
  • testez si cela fonctionne si vous l'exécutez manuellement à partir d'un autre répertoire de travail, d'un autre utilisateur, etc.

Note:ton Popen() passes d'appel startupinfo c'est Windows uniquement.Une commande de chaîne avec plusieurs arguments qui fonctionneraient sous Windows échoue avec le "No such file or directory" erreur sous Unix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top