Подтвердить что ты не робот

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).

4b9b3361

Ответ 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 документации.