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

时间:2014-02-25 01:17:16

标签: node.js subprocess spawn child-process

我有python脚本,它通过统计R(通过PypeR)打印出长列表。这个python脚本工作得非常好。

现在我尝试通过child_process的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

注意:我的python脚本运行正常。我已经手动测试了它。

1 个答案:

答案 0 :(得分:1)

  

我的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
  • 中找到
  • 使用list参数而不是字符串
  • 测试是否可以从其他工作目录,不同用户等手动运行它

注意:您的Popen()来电仅通过startupinfo。带有多个可在Windows上运行的参数的字符串命令因Unix上的"No such file or directory"错误而失败。