【问题标题】:Spawning python script in nodejs on heroku在heroku上的nodejs中生成python脚本
【发布时间】:2020-07-06 23:49:53
【问题描述】:

总结性问题:为什么 Heroku 指示 os.system('say ...') 是“未找到”,我该如何解决?

我有一个 Node.js 应用程序,我在其中使用 child_process 生成一个 Python 脚本,该脚本在给出特定单词时读出音频。我知道当我在localhost:5000 上运行我的服务器时它可以工作,但是当我在 Heroku 上部署它时,我在这篇文章底部的图片中出现错误。我已经尝试添加heroku/python buildpack,但这也没有奏效。

我在 Node.js 中的 JS 代码如下所示:

app.get('/perform/:word', readOut)
function readOut(req, res) {

    var spawn = require("child_process").spawn;

    var process = spawn('python', ["./readout.py", req.params.word]);

    res.send("Action completed!")
}

请注意,“操作已完成”确实会发送回我的客户端,因此它正在通过代码运行。

通过捕获stderr 并将其打印到控制台,我意识到存在错误。这仅发生在 Heroku 上,我不确定这意味着什么。我不太确定 python 脚本在localhost 上正常工作时怎么会出错,但话又说回来,我认为缺乏认识是我的失败之处。

这就是我的 Python 文件的样子:

import os
import sys

os.system('say {}'.format(sys.argv[1]))

错误信息是这样的:

stderr: sh: 1: say: not found

有人知道为什么 Heroku 会发生这种情况吗?我是否缺少某个包裹或其他任何东西?如何让 Heroku 知道 os.system() 的调用?

编辑:我实际上在 Python 脚本中添加了一段代码,上面写着

os.system('date')

它正确地记录到标准输出。一定是os.system('say')的具体问题。

【问题讨论】:

  • “我已经尝试添加一个heroku/python buildpack,但这也没有用”——那么发生了什么?你收到错误信息了吗?它说了什么?
  • 它只是没有做任何事情。 buildpack 已添加到应用程序中,但它没有任何帮助,只是结果相同。调用了函数 readOut,但该过程没有发生,消息通过 res.send 发回
  • “它只是没有做任何事情”——好吧,它返回了什么? process 在你分享的代码中有什么价值?
  • 我只是改变了它,而不是 res.send("Action completed!") 我做了 res.send(process) 所以我可以查看对象,当我查看本地主机时两个对象是相同的:5000 有效,heroku 无效。它们都返回具有诸如 connected、stderr、stdin 等字段的对象,但无论哪种方式它们都是相同的。它不像进程返回 null 或任何东西
  • 我没有问对象是否相同。我问process 有什么价值。请与我们分享这些信息。

标签: python node.js heroku


【解决方案1】:

这里至少有两个问题:

  1. 看起来 macOS 有一个say 命令,但它在 Linux 上不存在。 Heroku 不运行 macOS。

  2. 即使say 可用,它也不会做任何有用的事情。它会尝试在某处的数据中心中说出在服务器上 所说的任何内容。服务器可能没有硬件来播放任何音频,如果有的话,没有人会听到它。

    这只是似乎在您的本地机器上工作,因为您的客户端和服务器在同一台机器上。如果您希望在您的 客户端 机器上听到某些内容,则必须使用客户端 JavaScript。

    What is the difference between client-side and server-side programming?

最后,Python 在这里没有做任何有用的事情。如果say 可用并且做了你想做的事,你可以用spawn() 或在你的JavaScript 代码中调用它。

【讨论】:

  • 哦,这实际上很有意义。它会在一些 Heroku 服务器上运行。谢谢!!您对可能在服务器上运行的东西有什么建议吗?只是为了了解更多但不是必需的:)
  • 产品推荐在这里是题外话,我对您的用例了解不多,无法给出推荐,我也没有文字转语音的经验。 A search 可能会发现一些有用的东西。如果您可以预先录制音频并播放它,那么总会有好老的<audio> tag
猜你喜欢
  • 2020-11-03
  • 2013-08-11
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多