Як отримати доступ до аргументів командного рядка в Python?


362

Я використовую python для створення налаштувань моїх проектів, але мені потрібна допомога з отриманням аргументів командного рядка.

Я спробував це на терміналі:

$python myfile.py var1 var2 var3

У своєму файлі Python я хочу використовувати всі вхідні змінні.


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

Відповіді:


502

Підручник Python пояснює це :

import sys

print(sys.argv)

Більш конкретно, якщо ви запускаєте python example.py one two three:

>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']

7
Танки, але тепер мені потрібно взяти var1 у користуванні? що тут відбувається .. :)
ParisNakitaKejser

102
Ду, зрозумів (sys.argv [1]): D
ParisNakitaKejser

115
import sys

sys.argv[1:]

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


5
Що [1:]означає?
Калонь Колоб

8
@KolobCanyon це означає "взяти підспів, починаючи з індексу 1 до кінця", тобто пропустити перший елемент
Каміль Ярош

@KolobCanyon взяти другий аргумент [1:]вгору, тому що перший аргумент sys.argvза замовчуванням - це назва файлу python, який ви, наприклад, запускаєте testrun.py.
Самуель

94

Я настійно рекомендую 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
Альбікоко

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, яке виконується. Будь-який індекс після цього - це аргументи, що передаються.


6

Якщо ви називаєте це так: $ python myfile.py var1 var2 var3

import sys

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

Подібно до масивів, які ви також маєте, sys.argv[0]який завжди є поточним робочим каталогом.


6
sys.argv[0]не є поточним робочим каталогом. Це ім'я файлу, який виконується.
дивіться

5

Деякі додаткові речі, які я можу придумати.

Як @allsyed сказав, що sys.argv надає список компонентів (включаючи назву програми), тому, якщо ви хочете знати кількість елементів, що пройшли через командний рядок, ви можете використовувати len () для його визначення. Виходячи з цього, ви можете створити повідомлення про виключення / помилки, якщо користувач не передав певну кількість параметрів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.