Erreur de segmentation (core dumped) lors de l'appel du script python depuis NodeJS via spawn
-
20-12-2019 - |
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.
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.