【发布时间】: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有什么价值。请与我们分享这些信息。