tsn*_*ake 5 python heroku node.js
摘要问题:为什么 Heroku 指示os.system('say ...')“未找到”,我该如何解决?
我有一个 Node.js 应用程序,我child_process用来生成一个 Python 脚本,该脚本在给出特定单词时读出音频。我知道当我在 上运行我的服务器时它可以工作localhost:5000,但是当我在 Heroku 上部署它时,我在这篇文章底部的图片中出现错误。我曾尝试添加heroku/pythonbuildpack,但这也不起作用。
我在 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!")
}
Run Code Online (Sandbox Code Playgroud)
请注意,“操作已完成”确实会发送回我的客户端,因此它正在运行代码。
我通过捕获stderr并将其打印到控制台来意识到存在错误。这仅发生在 Heroku 上,我不确定这意味着什么。我不太确定 python 脚本在正常工作时如何出错localhost,但话说回来,我认为缺乏认识是我的垮台所在。
这是我的 Python 文件的样子:
import os
import sys
os.system('say {}'.format(sys.argv[1]))
Run Code Online (Sandbox Code Playgroud)
错误信息是这样的:
stderr: sh: 1: say: not found
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么 Heroku 会发生这种情况?我是否缺少某个包裹或任何东西?我如何让 Heroku 知道os.system()电话?
编辑:我实际上在 Python 脚本中添加了一段代码,上面写着
os.system('date')
Run Code Online (Sandbox Code Playgroud)
并且它正确地登录到标准输出。它必须是os.system('say').
这里至少存在两个问题:
看起来 macOS 有一个say命令,但 Linux 上不存在。Heroku 不运行 macOS。
即使say 可用,也没有任何用处。它会尝试说出服务器上或某个数据中心中告诉它要说的任何内容。服务器可能没有播放任何音频的硬件,即使有,也没有人会听到。
这似乎只适用于您的本地计算机,因为您的客户端和服务器位于同一台计算机上。如果您希望在客户端计算机上听到某些内容,则必须使用客户端 JavaScript 来完成。
最后,Python 在这里没有做任何有用的事情。如果say可用并且执行了您想要的操作,您可以spawn()在 JavaScript 代码中使用 或 某些内容来调用它。
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |