Проблема с выполнением исполняемой программы Python - PullRequest
4 голосов
/ 09 апреля 2010

Я пытаюсь создать программу, чтобы запустить ее через командную строку в следующем формате:

./myProgram

Я сделал его исполняемым и поместил #!/usr/bin/env python в заголовок, но это дает мне следующую ошибку.

env: python\r: No such file or directory

Однако, когда я запускаю "python myProgram", он работает нормально. Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 3 ]

17 голосов
/ 09 апреля 2010

Ваши окончания строки неправильные. Используйте dos2unix, чтобы исправить их.

11 голосов
/ 09 апреля 2010

+ 1 по предложению Игнасио.

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

POSIX (любой Unix-аромат, такой как Linux, * BSD, Mac OS X и т. Д.) Использует \n (NEWLINE), в то время как DOS / Win использует комбинацию \r\n (CR / возврат каретки + NEWLINE), а старая Mac OS 8 или 9 использует только CR или \r.

, чтобы решить эту проблему, вы можете запустить утилиту, как предложил ignacio, или вы можете сделать это из своего текстового редактора (однако, это может быть неочевидно).

чтобы ответить на другую часть вашего вопроса, причина, по которой $ python myProgram работает, заключается в том, что Python обрабатывает все три различных конца строки одинаково ... строка shebang в верхней части игнорируется, потому что вы сказали Python, что нужно загрузить и запустить script, а "#" означает, что первая строка является комментарием и поэтому игнорируется.

когда вы говорите своей ОС-оболочке запустить ее, она должна проанализировать эту строку и выполнить любой интерпретатор, который вы запросили, но если это не удастся, то вы получите то же, что и вы.

надеюсь, это поможет!

пс. в примечании вы можете узнать, какой символ завершения строки используется в вашей операционной системе, просто проверьте атрибут os.linesep (data). например, на моем Mac (OS X) я получаю это:

>>> import os
>>> os.linesep
'\n'

Вот краткая сводка других связанных атрибутов, которые я плагиат из моих вступительных замечаний по хардкорному Python 1031 *: alt text

3 голосов
/ 09 апреля 2010

dos2unix filename.py или внутри vim введите команду :set fileformat=unix и сохраните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...