Как мне получить доступ к аргументам командной строки в Python?

362

Я использую python для создания настроек моего проекта, но мне нужна помощь в получении аргументов командной строки.

Я попробовал это на терминале:

$python myfile.py var1 var2 var3

В моем файле Python я хочу использовать все входные переменные.

ParisNakitaKejser
источник
1
Модуль Baker - отличный инструмент для написания приложений командной строки Python. pypi.python.org/pypi/Baker/1.02
Спайк Гроним

Ответы:

503

Учебник по Python объясняет это :

import sys

print(sys.argv)

Более конкретно, если вы запустите python example.py one two three:

>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']
SilentGhost
источник
7
Танки, но теперь мне нужно использовать вар1? что здесь происходит .. :)
ParisNakitaKejser
102
Dooh, получил (sys.argv [1]): D
ParisNakitaKejser
117
import sys

sys.argv[1:]

выдаст вам список аргументов (не включая имя файла python)

Райан М
источник
5
Что [1:]значит?
Каньон Колоб
8
@KolobCanyon это означает «взять подсписок, начиная с индекса 1 до конца», т.е. пропустить первый элемент
Камил Ярош
@KolobCanyon принимает второй аргумент [1:]вверх, потому что первый аргумент sys.argvпо умолчанию является именем файла python, который вы запускаете, например testrun.py.
Самуэль Нде
95

Я очень рекомендую, argparseкоторый идет с Python 2.7 и позже.

argparseМодуль уменьшает котел пластину код и делает код более надежным, так как модуль обрабатывает все стандартные варианты использования ( в том числе подкоманд), генерирует помощь и использование для вас, проверки и дезинфицировать ввода пользователя - все вещи вы должны беспокоиться о том, когда вам Используем sys.argvподход. И это бесплатно (встроенный).

Вот небольшой пример:

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

и выход для python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

и python prog.py 1как вы ожидаете:

2
Майкл Дорнер
источник
7
Качественный ответ, не совсем уверен, почему кто-то здесь будет использовать любой из других подходов, приведенных здесь. Тем более, что он встроен! У вас, ребята, есть дела поважнее, чем разбор?
Басинатор
Просто упомянуть, как вы должны получить доступ к конкретному аргументу в пространстве имен args: args.counter
MikeL
1
@Bassinator В случаях, когда разбор аргументов не требуется.
снижение активности
чтобы использовать значение по умолчанию, без конкретного значения в командной строке, вы можете использовать что-то вроде: parser.add_argument('var3', nargs='?', type=int, default=3)var3 - необязательный параметр, если вы не укажете значение в командной строке, вы можете получить доступ к var3 в своем коде, значение по умолчанию для var3 = 3
Albicocco
56

Код Python:

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

Призвание:

$python myfile.py var1 var2 var3

Вывод:

Params= var1 var2 var3 
Чарльз П.
источник
24

Вы можете использовать, sys.argvчтобы получить аргументы в виде списка.

Если вам нужен доступ к отдельным элементам, вы можете использовать

sys.argv[i]  

где iиндекс, 0даст вам имя исполняемого файла python. Любой индекс после этого является переданными аргументами.

allsyed
источник
6

Если вы называете это так: $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

Подобно массивам у вас также есть, sys.argv[0]который всегда является текущим рабочим каталогом.

lvadim01
источник
6
sys.argv[0]не текущий рабочий каталог. Это имя файла, который выполняется.
посмотрите
5

Некоторые дополнительные вещи, которые я могу придумать.

Как сказал @allsyed, sys.argv предоставляет список компонентов (включая имя программы), поэтому, если вы хотите узнать количество элементов, передаваемых через командную строку, вы можете использовать len () для его определения. Исходя из этого, вы можете создавать сообщения об исключениях / ошибках, если пользователь не передал определенное количество параметров.

Также, если вы ищете лучший способ обработки аргументов командной строки, я бы посоветовал вам взглянуть на https://docs.python.org/2/howto/argparse.html.

Рохан Садале
источник