Я пытаюсь открыть программу 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)
~/backend $ ls -l test*
дает -rwx------ 1 u11198 dyno 16176 Feb 20 16:16 test-print
Попробуйте chmod +x ./test-print
Ладно, мое предположение было неверным... оно должно было отображаться как 'test-print '.
@EmanuelP - это будет отображаться как ошибка прав доступа, а не файл не найден.
@EmanuelP Я думаю, что у него уже есть права на выполнение
@ColeWhite Не думай. Гарантировать. :)
Вы можете попробовать strace ./test-print, а потом, когда это не сработает, strace strace ./test-print.
strace
, к сожалению, недоступно на диностенде
@ColeWhite Пожалуйста, отредактируйте свой вопрос и покажите результат type test-print. Вся запрашиваемая информация или разъяснения должны быть добавлены к вопросу. На какой системе вы строили ./test-print?
@Bodo Я добавил вывод к вопросу. Я построил программу на своей машине.
Пожалуйста, покажите вывод ls -laQ и ls -laqв ~/backend. Что такое «моя машина»? Система, в которой вы пытаетесь запустить программу?
@Bodo Я имею в виду свою локальную машину, а не ту, на которой я запускаю программу. Я добавил результат, который вы просили, к вопросу.
И вывод id, пожалуйста.
@Bobo, я добавил вывод
В выводе 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 будет работать.)
Дикое предположение, но попробуйте ls -l test* - есть ли в имени файла начальный или конечный пробел (он будет отображаться в кавычках)?