Node.js 通过spawn从NodeJS调用python脚本时出现分段错误(内核转储)

Node.js 通过spawn从NodeJS调用python脚本时出现分段错误(内核转储),node.js,subprocess,spawn,child-process,Node.js,Subprocess,Spawn,Child Process,我有一个python脚本,它通过statisticalr(PypeR)打印出一个长列表。这个python脚本运行得非常好 现在,我试图通过child_进程的spawn功能从NodeJS运行此脚本,但失败了,出现以下错误:- Traceback (most recent call last): File "pyper_sample.py", line 5, in <module> r=R() File "/home/mehtam/pyper.py", line 582

我有一个python脚本,它通过statisticalr(PypeR)打印出一个长列表。这个python脚本运行得非常好

现在,我试图通过child_进程的spawn功能从NodeJS运行此脚本,但失败了,出现以下错误:-

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
回溯(最近一次呼叫最后一次):
文件“pyper_sample.py”,第5行,在
r=r()
文件“/home/mehtam/pyper.py”,第582行,在__
“prog”:Popen(RCMD,stdin=PIPE,stdout=PIPE,stderr=return\u err和_stdout或childstderr,startupinfo=info),
文件“/usr/lib64/python2.6/subprocess.py”,第642行,在__
错误读取,错误写入)
文件“/usr/lib64/python2.6/subprocess.py”,第1234行,在_execute_child中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录
./temp.sh:第1行:27500分段故障(堆芯转储)python pyper_sample.py o1dn01.tsv cpu_整体
子进程已退出,代码为:139
注意:我的python脚本工作得很好。我已经手动测试过了

我的python脚本工作得很好。我已经手动测试过了

输出清楚地表明,
OSError:在调用
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
确保:

  • 您的(子)程序可以在当前
    $PATH
  • 使用列表参数而不是字符串
  • 如果您从不同的工作目录、不同的用户等手动运行它,请测试它是否工作

注意:您的
Popen()
调用传递的
startupinfo
仅适用于Windows。带有多个参数的字符串命令在Windows上运行失败,在Unix上出现
“没有这样的文件或目录”
错误。

什么是
打印(repr(RCMD))
?名称错误:名称“RCMD”未定义问题
我没有用RCMD设置R路径
r=r(RCMD=“/home/mehtam/r-2.15.2/bin/r”)在我的python脚本中访问PypeR时,您应该在
Popen(RCMD,…)
之前运行
print()
,在那里它被明确定义(查看您问题中的回溯)。很抱歉,不知道如何进行换行(
,不工作),我做了以下操作:-
1。shell=True已预先设置
2。我试图传递简单的Popen([“ls”,“-l”],shell=True),但它在NodeJS中出现了以下错误:-“events.js:72”thrower;//未处理的“error”事件^error:spawn enoint at errnoException(child_process.js:980:11)at process.ChildProcess.\u handle.onexit(child_process.js:771:34)@meetmehtmehta:您在我的回答中看到
shell=True
?你为什么用它?试试看:
p=Popen([“ls”,“-l”])
->shell=True。在终端上执行时执行。我把它拿走了
我使用简单的Popen([“ls,”-l“])执行您的脚本。它在终端中执行得很好,但不是彻底的NodeJS spawn。@meetmehta:要调试问题,请尝试将其隔离:1.尝试在NodeJS
true
false
实用程序中运行2.如果可行,则尝试从NodeJS 3运行hello world Python脚本。如果可行,请尝试在Py中运行
true
false
实用程序由nodejs 4生成的thon脚本。如果它有效,请尝试在Jack建造的房子中的Python脚本中运行hello world R实用程序。。。
>>> 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