Запуск программы C на Heroku: такого файла нет

Я пытаюсь открыть программу C в скрипте Python, работающем на динамометрическом стенде Heroku. Скрипт на питоне локально работает нормально, а на дино пишет, что не удается найти исполняемый файл. Строка для запуска программы на Python:

proc = subprocess.Popen(["./backend/test-print"], stdout=subprocess.PIPE, stderr=subprocess.PIPE),

где backend — папка, содержащая программу test-print и скрипт Python. Я запускаю сценарий Python из корня папки, поэтому он отлично находит сценарий. Журналы Heroku говорят:

FileNotFoundError: [Errno 2] No such file or directory: './backend/test-print'.

Если я запускаю bash на динамометрическом стенде и пытаюсь запустить программу вручную, она выдает ту же ошибку:

Running bash on ⬢ ******** ... up, run.8123 (Eco)
~ $ cd backend
~/backend $ ls
server.py  test-print
~/backend $ ./test-print
bash: ./test-print: No such file or directory

Есть идеи? Заранее спасибо. Я создал тестовую печать программы на своем локальном компьютере (не на том, на котором я запускаю программу).

Я пытался положить программу в корневую /app папку, чтобы посмотреть, найдется ли она потом, но это не сработало.

Обновлено: я также должен добавить, что когда я cat test-print, он отлично находит файл и печатает его содержимое.

Обновлено: type test-print выходы

~/backend $ type test-print 
bash: type: test-print: not found

Обновлено:

~/backend $ ls -laQ
total 28
drwx------ 2 u5587 dyno  4096 Feb 20 16:16 "."
drwx------ 5 u5587 dyno  4096 Feb 20 17:08 ".."
-rw------- 1 u5587 dyno   520 Feb 20 16:16 "server.py"
-rwx------ 1 u5587 dyno 16176 Feb 20 16:16 "test-print"
~/backend $ ls -laq
total 28
drwx------ 2 u5587 dyno  4096 Feb 20 16:16 .
drwx------ 5 u5587 dyno  4096 Feb 20 17:08 ..
-rw------- 1 u5587 dyno   520 Feb 20 16:16 server.py
-rwx------ 1 u5587 dyno 16176 Feb 20 16:16 test-print

~/backend $ id
uid=13747(u13747) gid=13747(dyno) groups=13747(dyno)

Дикое предположение, но попробуйте ls -l test* - есть ли в имени файла начальный или конечный пробел (он будет отображаться в кавычках)?

tdelaney 20.02.2023 17:28
~/backend $ ls -l test* дает -rwx------ 1 u11198 dyno 16176 Feb 20 16:16 test-print
Cole White 20.02.2023 17:30

Попробуйте chmod +x ./test-print

Emanuel P 20.02.2023 17:31

Ладно, мое предположение было неверным... оно должно было отображаться как 'test-print '.

tdelaney 20.02.2023 17:31

@EmanuelP - это будет отображаться как ошибка прав доступа, а не файл не найден.

tdelaney 20.02.2023 17:32

@EmanuelP Я думаю, что у него уже есть права на выполнение

Cole White 20.02.2023 17:32

@ColeWhite Не думай. Гарантировать. :)

Haris 20.02.2023 17:36

Вы можете попробовать strace ./test-print, а потом, когда это не сработает, strace strace ./test-print.

pmacfarlane 20.02.2023 17:38
strace, к сожалению, недоступно на диностенде
Cole White 20.02.2023 17:40

@ColeWhite Пожалуйста, отредактируйте свой вопрос и покажите результат type test-print. Вся запрашиваемая информация или разъяснения должны быть добавлены к вопросу. На какой системе вы строили ./test-print?

Bodo 20.02.2023 17:51

@Bodo Я добавил вывод к вопросу. Я построил программу на своей машине.

Cole White 20.02.2023 17:56

Пожалуйста, покажите вывод ls -laQ и ls -laqв ~/backend. Что такое «моя машина»? Система, в которой вы пытаетесь запустить программу?

Bodo 20.02.2023 18:05

@Bodo Я имею в виду свою локальную машину, а не ту, на которой я запускаю программу. Я добавил результат, который вы просили, к вопросу.

Cole White 20.02.2023 18:10

И вывод id, пожалуйста.

Bodo 20.02.2023 18:12

@Bobo, я добавил вывод

Cole White 20.02.2023 18:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
15
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В выводе u5587 и u13747 есть разные имена пользователей ls и id.

~/backend $ ls -laq
total 28
drwx------ 2 u5587 dyno  4096 Feb 20 16:16 .
drwx------ 5 u5587 dyno  4096 Feb 20 17:08 ..
-rw------- 1 u5587 dyno   520 Feb 20 16:16 server.py
-rwx------ 1 u5587 dyno 16176 Feb 20 16:16 test-print

~/backend $ id
uid=13747(u13747) gid=13747(dyno) groups=13747(dyno)

Пользователь u13747 не имеет права просматривать содержимое текущего каталога или получать доступ к чему-либо в этом каталоге, поскольку он принадлежит другому пользователю и не имеет разрешений для группы dyno или других лиц.

(Это не объясняет, почему cat test-print будет работать.)

Другие вопросы по теме