【问题标题】:How to get data from python script at Node.js?如何从 Node.js 的 python 脚本中获取数据?
【发布时间】:2015-07-28 08:28:52
【问题描述】:

我正在尝试从 Node.js 服务器上的 python 脚本获取数据。 我需要以超级用户权限启动这个 python 脚本。

child.execFile('sudo python /home/pi/node.js_scripts/app/request.py', function (err, stdout, stderr) {
if (err) throw err;
if (stderr) throw err;
console.log(stdout); }); 

但我得到这个错误:

Error: spawn sudo python /home/pi/node.js_scripts/app/request.py ENOENT
    at exports._errnoException (util.js:746:11)
    at Process.ChildProcess._handle.onexit (child_process.js:1046:32)
    at child_process.js:1137:20
    at process._tickCallback (node.js:355:11)

我该如何解决我的问题?

【问题讨论】:

    标签: python node.js child-process spawn


    【解决方案1】:

    问题是execFile 需要一个文件路径。该文件必须是可执行的。在您的情况下,您正在尝试执行命令。请改用child.exec(),或创建一个运行此命令的小型可执行 shell 脚本。

    另外,给你的 node.js 服务器 sudo 权限是不明智的。不过,我对如何解决这个问题没有任何好的建议。也许看看setuid。这真的取决于您的用例(并且应该是一个单独的问题)。

    【讨论】:

    • 谢谢,我试过 child.exec() 但由于缓冲区容量,它最多只能返回 200K。是否可以使用 sudo 生成进程?我同意你关于 sudo 权限的观点,但实际上我不知道更好的方法来避免它。
    • 我认为您在使用 execFile 时也会遇到同样的问题?您可以将maxBuffer 选项与exec 一起使用,但也许您应该从孩子那里读取,这样您的缓冲区就不会被填满。例如,请参阅this
    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2016-03-16
    相关资源
    最近更新 更多