Python script дает `: Нет такого файла или каталога`
У меня есть несколько скриптов python, которые работают нормально, но один script (начиная с этого утра) начал давать мне эту ошибку, если я попытаюсь запустить ее из bash:
: нет такого файла или каталога
Я могу запустить "сломанный" script, выполнив python script_name.py
и немного оглядевшись, общая идея, которую я выбрал, состояла в том, что, возможно, моя строка, заканчивающаяся хэш-бэнд, менялась (молча), поэтому я посмотрел при завершении строки рабочего script и сломанной script с помощью опции :set list
в VI, как указано в этом вопросе, → Просмотр строк в текстовом файле
Оба файла, похоже, заканчиваются с использованием одного и того же символа (a $
), поэтому я как бы не понимаю, как это исходит. В частности, как фактически "видеть" строку, заканчивающуюся в случае, если set list
не является правильным методом.
PS: script является исполняемым, а shebang находится там, я заявил, что именно этот 1 script работал отлично до уик-энда, но он начал давать мне эту ошибку с сегодняшнего утра.
- изменить: -
Запуск script через dos2unix
заставляет его работать снова, но я хотел бы узнать о любом способе визуализации строки, заканчивающейся как-то в VI (M), или почему Geany каким-то образом преобразовал окончание строки в первую очередь ( так как я никогда не работаю над системой dos/windows).
Ответы
Ответ 1
Из вышеприведенных комментариев выглядит, что у вас есть окончание строк dos, и поэтому строка hashbang неправильно обрабатывается.
Стиль окончания строки не отображается с помощью :set list
в Vim, потому что эта опция используется только при чтении/записи файла. В конце строки строки всегда есть строки-окончания. Стиль окончания строки, используемый для файла, хранится в опции Vim per-file, которая называется fileformat
.
Чтобы увидеть/изменить стиль окончания строки из Vim, вы можете использовать следующие команды:
:set fileformat
:set ff
Он покажет dos
или unix
. Вы хотите unix
, конечно, -).
Чтобы быстро изменить его, вы можете сохранить файл с помощью
:w ++ff=unix
Или, если вы предпочитаете:
:set ff=unix
И затем сохраните файл в обычном режиме.
Итак, посмотрите все детали gory только :help fileformat
, :help file-formats
и :help fileformats
Ответ 2
Лично я считаю неправильным использование прямого пути к интерпретатору python. Поскольку вы не используете платформу Windows, у вас должна быть программа env, обычно в /usr/bin (/usr/bin/env). Попробуйте использовать следующий shebang:
#!/usr/bin/env python
Различные дистрибутивы хранят двоичные файлы python в /bin или/usr/bin (или некоторые странные местоположения), и это делает ваш script config-independent (насколько это возможно, здесь мы имеем возможность, что env хранится в другом месте; все же - менее возможно, что env не находится в /usr/bin, чем этот python ошибочен).
У меня была подобная проблема (если не совсем то же самое), и это сработало для меня.
Кроме того, у меня установлены оба интерпретатора python (2.7.x и 3.x), поэтому мне нужно использовать аргумент "python3" для env. AFAIR обычно передает разные имена в разные двоичные файлы, поэтому "env python" будет запускать python2.7 в моей системе, "env python3" (также python33, или smth), будет запускать p3k и "env python2" (также python27, и т.д.) запустит python 2.7.x. Объявить, какая версия интерпретатора должна использоваться, также кажется хорошей идеей.
Ответ 3
Вы также можете использовать команду dos2unix для преобразования формата файла
dos2unix
Это помогло мне запустить скрипты python
Обычно это происходит, когда мы открываем файлы в окнах, делаем изменения и сохраняем их.
если вы откроете файл, найдите символы ^ M в конце каждой строки
Спасибо
Ответ 4
Я столкнулся с этой проблемой, отредактировав свой код в Windows, проверив его с помощью git и проверив и запустив его в Linux.
Мое решение было: tell git Делать правильную вещь. Я выпустил эту команду в окне Windows:
git config --global core.autocrlf true
Модифицировал файлы и проверил их; вуаля, нет такой проблемы.
Как обсуждалось в Git документации.