Python не будет читать sys.argv

#python #command-line-arguments #sys

#python #аргументы командной строки #sys

Вопрос:

     import sys

    print sys.argv[1]
 

привет,

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

     myfile.py helloworld
 

и что я получаю в ответ:

     IndexError: list index out of range
 

Мне показалось, что однажды это сработало для меня, но больше не будет работать, и я попытался удалить и переустановить Python, и он все еще не работает.

Итак, мой вопрос в том, я делаю что-то не так? или я просто сломал Python?

Спасибо за любую помощь

Использование: Windows 7 Python 2.7.2

Комментарии:

1. Что происходит, когда вы просто print sys.argv ? И работает ли это при вызове файла через python.exe myfile.py helloworld ?

2. ах, спасибо за ваши ответы, удалось заставить его работать. произошла очень глупая ошибка, не добавлял python в путь в системных переменных

3. Для тех, у кого возникли проблемы с передачей аргументов скрипту в Windows без добавления к нему вызова Python (например python foo.py a , работает, но foo.py a не работает), прокрутите первый ответ.

Ответ №1:

Запустите редактор реестра (regedit). Установите ключ ключей Applicationspython26.exeshellopencommand на: "C:Python26python26.exe" "%1" %*

Источник этого решения: http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows /

Комментарии:

1. вау, это упущение в реестре поразило нас сегодня, мы пытались сбалансировать параллельную установку Python 2.7 Anaconda и 3.4. Установщик 3.4 опустил этот %* аргумент, но нам нужно было установить его как HKEY_CLASSES_ROOTApplicationspythonxx.exeshellopencommand для ключа, так и для HKEY_CLASSES_ROOTpy_auto_fileshellopencommand ключа

2. Спасибо за ваш ответ

Ответ №2:

Вы уверены, что вызываете свой скрипт на python так, как вы думаете?

 #!/usr/bin/python
import sys

if len(sys.argv) < 2:
    print "you did not give any argumentsn"
else:
    print sys.argv[1]
 

ВОЗВРАТ:

 $ ./foo.py 
you did not give any arguments

$ ./foo.py hello_world
hello_world
$