./xx.py: строка 1: import: команда не найдена

Я пытаюсь использовать этот код Python urllib2 Basic Auth Problem для загрузки содержимого веб-страницы с URL-адреса, для которого требуется аутентификация. Код, который я пытаюсь сделать:

 import urllib2, base64

request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)

Это показывает мне:

./xx.py: line 1: import: command not found
./xx.py: line 3: syntax error near unexpected token `('
./xx.py: line 3: `request = urllib2.Request("http://api.foursquare.com/v1/user")'

Мне интересно, что я делаю неправильно? Я использую Python 2.7.5. Как загрузить содержимое файла с URL-адреса, требующего проверки подлинности?

Ответ 1

Это не проблема, связанная с аутентификацией на первом этапе. Ваш import не работает. Итак, попробуйте написать это в первой строке:

#!/usr/bin/python

и в течение времени, используя

python xx.py

Для вас вот одно объяснение:

>>> abc = "Hei Buddy"
>>> print "%s" %abc
Hei Buddy
>>> 

>>> print "%s" %xyz

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    print "%s" %xyz
NameError: name 'xyz' is not defined

Сначала я инициализировал переменную abc, и она работает нормально. С другой стороны, xyz не работает, поскольку он не инициализирован!

Ответ 2

Используете ли вы ОС на базе UNIX, например Linux? Если это так, добавьте строку shebang в самый верх вашего script:

#!/usr/bin/python

Под которым вы будете иметь остальную часть кода (xx.py в вашем случае), который у вас уже есть. Затем запустите ту же команду на терминале:

$ python xx.py

Затем это должно работать нормально, поскольку теперь оно интерпретирует это как код Python. Однако при работе с терминалом это не имеет значения, поскольку python указывает, как интерпретировать его здесь. То, что он делает, это выполнить его за пределами терминала, т.е. Выполнить его из браузера файлов.

Ответ 3

Если вы запускаете script непосредственно, например, ./xx.py, а ваш script не имеет shebang, такого как #!/usr/bin/env python, на самом верху, то ваша оболочка может выполнить его как оболочку script. POSIX говорит:

Если функция execl() не работает из-за ошибки, эквивалентной [ENOEXEC], определенная в объеме системных интерфейсов POSIX.1-2008, оболочка должна выполнить команду, эквивалентную shell, вызванный с именем пути, полученным в результате поиска в качестве первого операнд, с любыми остальными аргументами, переданными в новую оболочку, кроме что значение "$ 0" в новой оболочке может быть установлено в команде имя. Если исполняемый файл не является текстовым файлом, оболочка может обойти это выполнение команды. В этом случае он должен написать сообщение об ошибке, и возвращает статус выхода 126.

Примечание: вы можете получить ENOEXEC, если в вашем текстовом файле нет shebang.

Без shebang оболочка пытается запустить ваш Python script как оболочку script, которая приводит к ошибке: import: command not found.

Кроме того, если вы запустите свой script как python xx.py, вам не понадобится shebang. Вам даже не нужно, чтобы он исполнялся (+x). В этом случае ваш script интерпретируется python.

В Windows shebang не используется, если не установлен pylauncher. Это включено в Python 3.3+.

Ответ 4

Когда вы видите "import: command not found" при первом импорте, это вызвано тем, что синтаксический анализатор не использует кодировку символов, соответствующую вашему файлу py. Особенно, если вы не используете кодировку ASCII в файле py.

Для правильного выбора нужно указать правильную кодировку поверх файла py в соответствии с кодировкой символа файла.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os

Ответ 5

У меня возникла такая же проблема, и теперь я нашел свое решение этой проблемы.

#!/usr/bin/python

import sys
import os

os.system('meld "%s" "%s"' % (sys.argv[2], sys.argv[5]))

Это код [1] для моего случая. Когда я попробовал этот script, я получил сообщение об ошибке, например:

import: команда не найдена

Я обнаружил, что люди говорят о shebang. Как вы видите, в моем коде Python есть shebang. Я пробовал эти и эти испытания, но не нашел хорошего решения.

Я, наконец, попытался ввести shebang сам.

#!/usr/bin/python

и удалил скопированный файл.

И моя проблема решена!!!

Я скопировал код из Интернета [1].

И я предполагаю, что в исходном скопированном выражении shebang были обнаружены невидимые (?) невидимые специальные символы.

Я использую vim, иногда возникают аналогичные проблемы. Особенно, когда я скопировал фрагмент кода из Интернета, такие проблемы случаются. В веб-страницах есть некоторые специальные символы вируса! Я сомневаюсь.: -)

Journeyer

PS) Я скопировал код в Windows 7 - host OS - в буфер обмена Windows и вставил его в мой vim в гостевой ОС Ubuntu. VM - виртуальная машина Oracle.

[1] http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

Ответ 6

Это о Shebang

#!usr/bin/python

Это скажет, какой интерпретатор проснется, чтобы запустить код, написанный в файле.