Хочу зазначити, що попередні відповіді дали багато припущень щодо знань користувача. Ця відповідь намагається дати відповідь на запитання на більш навчальному рівні.
Для кожного виклику Python sys.argvавтоматично складається список рядків, що представляють аргументи (як розділені пробілами) в командному рядку. Назва походить від конвенції програмування С, в якій argv і argc представляють аргументи командного рядка.
Ви хочете дізнатися більше про списки та рядки під час ознайомлення з Python, але тим часом, ось кілька речей, які потрібно знати.
Ви можете просто створити сценарій, який друкує аргументи так, як вони представлені. Він також друкує кількість аргументів, використовуючи lenфункцію зі списку.
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
Сценарій вимагає Python 2.6 або новішої версії. Якщо ви викликаєте цей скрипт print_args.py, ви можете викликати його різними аргументами, щоб побачити, що відбувається.
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
Як бачите, аргументи командного рядка містять ім'я скрипта, але не ім'я інтерпретатора. У цьому сенсі Python розглядає сценарій як виконуваний файл. Якщо вам потрібно знати ім'я виконуваного файлу (python в цьому випадку), ви можете використовувати sys.executable.
З прикладів видно, що можна отримувати аргументи, які містять пробіли, якщо користувач посилався на сценарій з аргументами, інкапсульованими в лапки, тож ви отримуєте список аргументів, наданих користувачем.
Тепер у вашому коді Python ви можете використовувати цей список рядків як вхід до вашої програми. Оскільки списки індексуються нульовими цілими числами, ви можете отримати окремі елементи за допомогою синтаксису списку [0]. Наприклад, щоб отримати ім'я сценарію:
script_name = sys.argv[0] # this will always work.
Хоча це цікаво, вам рідко потрібно знати назву сценарію. Щоб отримати перший аргумент після сценарію для імені файлу, ви можете зробити наступне:
filename = sys.argv[1]
Це дуже поширене використання, але зауважте, що воно не вдасться з IndexError, якщо аргумент не наводиться.
Також Python дозволяє посилатися на фрагмент списку, так що для отримання іншого списку лише аргументів, що надаються користувачем (але без назви сценарію), ви можете зробити
user_args = sys.argv[1:] # get everything after the script name
Крім того, Python дозволяє призначити послідовність елементів (включаючи списки) імен змінних. Отже, якщо ви очікуєте, що користувач завжди надасть два аргументи, ви можете призначити ці аргументи (як рядки) двом змінним:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
Отже, щоб відповісти на ваше конкретне запитання, sys.argv[1]представляє перший аргумент командного рядка (як а string), наданий до відповідного сценарію. Він не запросить введення, але він не вдасться за допомогою IndexError, якщо в командному рядку після імені сценарію не буде подано жодних аргументів.