Ошибка сегментации (сброс ядра) при вызове скрипта Python из NodeJS через спавн

StackOverflow https://stackoverflow.com//questions/22002701

Вопрос

У меня есть скрипт Python, который распечатывает длинный список с помощью статистического R (от PypeR).Этот скрипт Python работает абсолютно нормально.

Теперь я пытаюсь запустить этот скрипт из NodeJS через функцию создания child_process, но он терпит неудачу со следующей ошибкой: -

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

Примечание:Мой скрипт Python работает отлично.Я уже проверял это вручную.

Это было полезно?

Решение

Мой скрипт Python работает отлично.Я уже проверял это вручную.

Результаты ясно показывают, что OSError: No such file or directory исключение произошло во время Popen() вызов.

Это означает, что программа не найдена, например,

>>> 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

Кроме того, передача всей команды в виде строки вместо списка (shell=False по умолчанию) является распространенной ошибкой:

>>> 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

Убеждаться:

  • вашу (дочернюю) программу можно найти в текущем $PATH
  • используйте аргумент списка вместо строки
  • проверьте, работает ли он, если вы запустите его вручную из другого рабочего каталога, от другого пользователя и т. д.

Примечание:твой Popen() пропуски звонков startupinfo это только Windows.Строковая команда с несколькими аргументами, которая будет работать в Windows, завершается сбоем из-за "No such file or directory" ошибка в Unix.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top