Вызов двоичного файла C с помощью бота python discord на Heroku

#python #heroku #bots #discord #discord.py

#python #heroku #боты #Discord #discord.py

Вопрос:

У меня есть вопрос, я закодировал только базовый бот на python, одна из команд с именем «ascii» принимает входные данные из ctx, а затем с помощью подпроцесса.py вызывает двоичный файл C, который в значительной степени просто записывает входные данные с помощью «#» и » «, все работает нормально, когда я запускаю его на своем ПК, но я просто ставлю бота на heroku, и это не работает (работают другие команды), я вызываю его с помощью

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

В журналах Command 'ascii "input"' returned non-zero exit status 127. , которые я получаю из того, что я нашел, эта команда не была найдена, поэтому, я думаю, мне придется добавить directiory в path (например, /apps/bot/ascii или что-то в этом роде), но я не могу понять, что именно туда вставить, или если это вообще проблема.

Есть идеи, как заставить его работать?

edit_1: я попытался изменить вызов функции, для /app/ascii которой должен быть каталог, по крайней мере, я думал, но теперь он возвращает статус выхода 126, который означает, что команда не является исполняемым файлом

edit_2: просто попытался запустить ascii с консоли на heroku, сначала отказано в разрешении, но после того, как я дал ему разрешение, это сработало. Нужно ли мне каким-то образом устанавливать глобальное разрешение для ascii? Как в requirements.txt или что-то в этом роде?

Комментарии:

1. Команда, которую вы пытаетесь запустить, это ascii ? Что это делает? Откуда вы это взяли? (Возможно, его можно использовать; знание того, что это такое и откуда оно взялось, поможет ответить наверняка.)

2. это небольшая программа, которую я написал в качестве школьного домашнего задания, в значительной степени то, что она делает, это принимает входные данные, с которыми я его вызываю, и печатает их в большем размере, используя только # и пробелы, он выводит его в стандартный вывод, поэтому у меня есть подпроцесс для check_output, я недумаю, в этом есть проблема, потому что я запустил бота на своем компьютере с помощью пакетного файла, и все работало нормально, просто вызов heroku, вероятно, отличается

3. ascii Привязан к вашему репозиторию Git? Если да, то где вы его скомпилировали?

4. Код был скомпилирован на моем компьютере, затем двоичный файл .out был передан на github. (тот же двоичный файл, который работал на моем компьютере)

5. Какая операционная система установлена на вашем локальном компьютере? Вообще говоря, код C, скомпилированный на одном типе компьютера (операционная система и архитектура процессора), не будет работать на другом. Кроме того, вы говорите «двоичный файл .out», но ваша команда ascii . Должно ли это быть ascii.out / вам нужно переименовать файл в just ascii ?

Ответ №1:

Ооочень, для тех, кто хотел бы заниматься подобными вещами, я бы сказал, не делайте этого.. У меня было много проблем с настройкой этого, но теперь, похоже, это действительно работает хорошо, пока никаких проблем, но, оглядываясь назад, было бы намного быстрее, если бы я просто переписал файл .c в python, не так сложно, в итоге намного быстрее. Тем не менее, я расскажу вам, как я заставил его работать, и, следуя ему, вы можете заставить его работать довольно быстро.

К «учебному пособию»: во-первых, вызов двоичного файла в том виде, в каком он у меня есть в сообщении, работал отлично, никаких изменений для этого не требовалось.

На github, с которого он был развернут, мне нужно было добавить, как обычно, в приложения heroku, файл procfile (вы можете выполнить поиск в Интернете, почти 1 строка кода, вызывающая worker, файл .py bot), requirements.txt (где нестандартные библиотеки, которые я использовал, должны были быть добавлены, discord и asyncio для меня) и runtime.txt (заставил его запустить python 3.6.8, на самом деле, вероятно, не нужен). Кроме того, makefile, который я должен был создать. Не забудьте загрузить все необходимые файлы .c и .h, которые вы хотите использовать. Это должно быть на github.

Теперь к heroku:

сначала создайте новое приложение, я еще не подключил его к github. Затем я добавил пакет сборки C (для этого и предназначен makefile) и добавил пакет сборки python, который находится на heroku. Затем я вернулся к развертыванию и подключил github, включил автоматическое развертывание для хорошей оценки и развернул. Теперь просто вернитесь к обзору, настройте dynos, и вы «должны» видеть только одного рабочего, которого вы добавили в Procfile. Активируйте его, и если я не забыл какие-либо шаги, тогда файл .c должен скомпилироваться с make и makefile и должен быть способен запускаться при вызове python.

Теперь, когда я смотрю на это, это выглядит как 20 минут работы, лол, я потратил около 2,5 дней на то, чтобы заставить его работать…

Ну, по крайней мере, теперь вам не нужно проходить через то, что я сделал, если кому-нибудь когда-нибудь понадобится это сделать 🙂

Если у вас есть еще какие-либо вопросы, я постараюсь помочь, отправьте сообщение здесь или в discord (мое имя точно такое же, как здесь, и останется таким)