Использование аргументов командной строки в Python: Понимание sys.argv - PullRequest
6 голосов
/ 22 января 2011

Я сейчас изучаю Python The Hard Way.Я думаю, что этот пример может быть устаревшим, поэтому я хотел получить обратную связь здесь.

Я использую Python 3.1

from sys import argv

script, first, second, third = argv

print("the script is called:", (script))
print("your first variable is:", (first))
print("your second variable is:", (second))
print("your third variable is:", (third))

Я получаю эту ошибку:

Traceback (most recent call last):
  File "/path/ch13.py", line 3, in <module>
    script, first, second, third, bacon = argv
ValueError: need more than 1 value to unpack

Есть идеи, что случилось?

Ответы [ 10 ]

9 голосов
/ 22 января 2011

Вы забыли передать аргументы скрипту, например, foo.py bar baz quux.

enter image description here

4 голосов
/ 30 ноября 2011

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

python fileName.py argument1 argument2

В зависимости от того, сколько у вас переменных = от argv, это то, сколько вам нужно иметьминус первый аргумент (скрипт).Например,

 script, first, second, third = argv

должно иметь 3 аргумента.

3 голосов
/ 22 января 2011

sys.arg - список параметров командной строки.Вы должны фактически передать параметры командной строки в скрипт, чтобы заполнить этот список.Сделайте это либо в настройках проекта вашей IDE, либо запустив в командной строке так:

python script.py first second third

Обратите внимание, что первым аргументом всегда является имя скрипта (python script.py в данном случае).Благодаря распаковке вы получите ValueError каждый раз, когда передаете меньше или больше 3 параметров.Вы можете проверить номер перед распаковкой, используя len(argv)-1 и представляя подходящую ошибку, если не 3.

В связанной заметке посмотрите на getopt, если вам нужно сделать более сложный аргументмимоходом.

0 голосов
/ 07 июля 2018

Думаю, этот пример вам поможет. Вы можете передать желаемое количество аргументов, то есть количество параметров является переменным. : D

def main(*args):
    print("Arguments Passed: ", args)

if __name__ == '__main__':
    name_Script, *script_args = sys.argv
    print("Name of the script: ", name_Script)
    main(*script_args) #Send list of arguments
0 голосов
/ 31 мая 2017

Вы можете сделать

(script, first, second, third) = argv 

и передать 3 аргумента

python filename arg1 arg2 arg3

при запуске из командной строки.

Я использую Python 3.6.0. До того как я не обернул argv аргументы в фигурные скобки. Но теперь это работает.

you can check it here

0 голосов
/ 29 июля 2016
from sys import argv
a, b, c, d = argv
print "The script is called:", a
print "Your first variable is:", b
print "Your second variable is:", c
print "Your third variable is:", d

Сохранить этот скрипт как: s.py

Запустите этот скрипт из терминала следующим образом: enter image description here

0 голосов
/ 04 июля 2016

Выполнить код следующим образом:

python ch13.py first second third
0 голосов
/ 05 сентября 2014

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

python /path/ch13.py first second third
0 голосов
/ 09 апреля 2014

Все, что вам нужно сделать, это ввести любые три вещи при открытии скрипта. Например, запустите python (затем your filename.py) 1 2 3. «1, 2 и 3» можно заменить любыми тремя цифрами или словами.

0 голосов
/ 02 октября 2012

Вы пытаетесь распаковать argv в отдельные значения.Распаковка требует, чтобы точное количество значений соответствовало размеру распаковываемого значения.Учтите это:

a, b, c = [1, 2, 3]

работает нормально, но это:

a, b, c, d, e = [1]

выдаст вам ту же уродливую ошибку, которую вы только что произвели.Распаковка sys.argv так, как вы это сделали, особенно плоха, потому что это ввод пользователя, и вы не знаете, сколько аргументов предоставят пользователи вашего скрипта.Поэтому вы должны распаковать его более аккуратно:

if len(argv) == 5:
    script_name, a, b, c, d = argv
else:
    print "This script needs exactly four arguments, aborting"
    exit()
...