在 Heroku 上使用 python discord bot 调用 C 二进制文件

Posted

技术标签:

【中文标题】在 Heroku 上使用 python discord bot 调用 C 二进制文件【英文标题】:Calling a C binary with python discord bot on Heroku 【发布时间】:2019-09-02 09:22:12 【问题描述】:

我有一个问题,我只编写了一个基本的 python 机器人,其中一个名为“ascii”的命令从 ctx 获取输入,然后用 subproccess.py 调用 C 二进制文件,这几乎只是用“ #" 和 " ",当我在我的电脑上运行它时一切正常,但我只是把机器人放在 heroku 上,这不起作用(其他命令有效),我用

调用它

subprocess.check_output("ascii \"" + " ".join(text) + "\"", shell=True)

在我得到的日志中 Command 'ascii "input"' returned non-zero exit status 127. 从我发现的内容来看,这意味着找不到命令,所以我想我必须在路径中添加一个目录(如 /apps/bot/ascii 或其他东西),但我无法弄清楚到底要放入什么在那里,或者如果这甚至是问题。

任何想法如何使它工作?

edit_1:我尝试将函数的调用更改为/app/ascii,至少应该是我认为的目录,但现在它返回退出状态126,即该命令不是可执行文件

edit_2:刚尝试在heroku上使用控制台运行ascii,起初权限被拒绝,但在我给予权限后,它就起作用了。我是否需要以某种方式将全局权限设置为 ascii?像 requirements.txt 什么的?

【问题讨论】:

您尝试运行的命令是ascii?那有什么作用?你是从哪里弄来的? (也许可以使用它;知道它是什么以及它来自哪里将有助于确定答案。) 这是我作为学校作业编写的一个小程序,它所做的几乎就是接受我调用它的输入并以更大的形式打印出来,仅使用 # 和空格,它将它打印到标准输出,所以这就是为什么我有 check_output 的子进程,我认为这没有问题,因为我用批处理文件在我的计算机上运行了机器人并且一切正常,只是调用 heroku 可能是不同 ascii 是否已提交到您的 Git 存储库?如果是这样,你在哪里编译的? 代码是在我的电脑上编译的,然后 .out 二进制文件被提交到 github。 (在我的电脑上工作的相同二进制文件) 您的本地计算机上的操作系统是什么?一般来说,在一种类型的机器(操作系统和 CPU 架构)上编译的 C 代码不会在另一种机器上运行。此外,您说“.out 二进制文件”,但您的命令是 ascii。应该是ascii.out / 是否需要将文件重命名为ascii 【参考方案1】:

太好了, 对于任何想做这种事情的人,我会说,不要.. 我在设置这个时遇到了很多麻烦,但是现在,它实际上似乎运行良好,到目前为止没有任何问题,但是回头看,如果我只是将 .c 文件重新写入 python 会快得多,没那么难,到底快多了。 也就是说,我会告诉你我是如何让它工作的,通过遵循它,你可能会很快让它工作。

到“教程”: 首先,像我在帖子中那样调用二进制文件效果很好,不需要进行任何更改。

在部署它的 github 上,我需要像往常一样使用 heroku 应用程序添加一个 procfile(您可以在 Internet 上搜索,几乎只有 1 行代码调用 worker,.py bot 文件),要求。 txt(必须添加我使用的非标准库,对我来说是不和谐和异步)和 runtime.txt(强制它运行 python 3.6.8,实际上可能不需要)。另外,我必须创建一个makefile。不要忘记上传您想要使用的所有需要​​的 .c 和 .h 文件。 github上应该是这样的。

现在到heroku:

首先创建一个新的应用程序,我还没有连接到github。然后我添加了一个 C buildpack(这就是makefile 的用途),并添加了heroku 上的python buildpack。然后我回去部署并连接 github,启用自动部署以进行良好的测量和部署。现在回到概述,配置 dynos,你“应该”只看到一个工人,你在 Procfile 中添加的那个。激活它,如果我没有忘记任何步骤,那么 .c 文件应该使用 make 和 makefile 编译,并且应该能够在被 python 调用时运行。

现在我看着它,它看起来像 20 分钟的工作哈哈,我花了大约 2.5 天试图让它工作......

好吧,至少现在你不必经历我所做的事情,如果有人需要这样做的话:)

如果您还有任何问题,我会尽力提供帮助,发送消息,在这里或不和谐(我的名字与这里完全相同,并将保持不变)

【讨论】:

以上是关于在 Heroku 上使用 python discord bot 调用 C 二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 无法使用 Python 在 Heroku 上运行

在 Heroku 上安装 Buildpack 后的 Python ImportError

在 Heroku 上使用 python discord bot 调用 C 二进制文件

如何在 Heroku 服务器上安装自定义 Python 包(boto)

在heroku(python 3.4.3)上部署Django项目

DISCO 的角色 - 网络服务