Sys.argv: примеры (PYTHON)

Работа с аргументами командной строки через sys.argv в Python
Раздел: Системные функции, Аргументы командной строки
sys.argv: list

Основные сведения о sys.argv

Модуль sys в Python предоставляет доступ к переменным и функциям, взаимодействующим с интерпретатором. sys.argv представляет собой список аргументов командной строки, переданных скрипту Python.

Использование функции актуально при необходимости передачи параметров в скрипт во время его запуска из терминала или командной строки. Это удобно для создания консольных утилит, скриптов автоматизации или программ с настраиваемым поведением.

Аргументы:

  • sys.argv[0] содержит имя скрипта
  • sys.argv[1] и далее содержат переданные аргументы

Возвращаемое значение - список строк (list[str]). Для проверки количества аргументов применяют len(sys.argv).

Простые примеры использования

Пример 1: Базовое использование

import sys
print('Имя скрипта:', sys.argv[0])
print('Аргументы:', sys.argv[1:])
# Запуск: python script.py arg1 arg2
Имя скрипта: script.py
Аргументы: ['arg1', 'arg2']

Пример 2: Обработка числовых аргументов

import sys
if len(sys.argv) > 2:
    a = int(sys.argv[1])
    b = int(sys.argv[2])
    print(f'Сумма: {a + b}')
# Запуск: python script.py 5 3
Сумма: 8

Пример 3: Проверка наличия флага

import sys
verbose = '-v' in sys.argv
if verbose:
    print('Подробный режим включен')
# Запуск: python script.py -v
Подробный режим включен

Альтернативные модули Python

argparse - стандартный модуль для создания интерфейсов командной строки с автоматической генерацией справки, проверкой типов и поддержкой подкоманд. Предпочтителен для сложных сценариев.

getopt - модуль для разбора аргументов в стиле C, подходит для тех, кто привык к синтаксису getopt() в других языках.

click и typer - сторонние библиотеки для создания CLI с декораторами и автоматическим преобразованием типов. Удобны для быстрой разработки.

sys.argv применяют в простых случаях, когда не требуется сложная валидация или генерация справки.

Аналоги в других языках

PHP: $argv и $argc

<?php
print_r($argv);
?>
# Запуск: php script.php arg1
Array ([0] => script.php [1] => arg1)

JavaScript (Node.js): process.argv

console.log(process.argv);
# Запуск: node script.js arg1
['node', 'script.js', 'arg1']

Java: параметр main(String[] args)

public class Main {
    public static void main(String[] args) {
        System.out.println(args[0]);
    }
}

C#: string[] args в Main

static void Main(string[] args)
{
    Console.WriteLine(args[0]);
}

Golang: os.Args

package main
import (
    'fmt'
    'os'
)
func main() {
    fmt.Println(os.Args[1])
}

Основное отличие Python - sys.argv всегда доступен без дополнительных объявлений, в отличие от Java и C#, где args передается явно.

Типичные ошибки

Ошибка 1: Обращение к несуществующему индексу

import sys
print(sys.argv[1])  # Ошибка при запуске без аргументов
IndexError: list index out of range

Ошибка 2: Неправильное преобразование типов

import sys
num = int(sys.argv[1])  # Ошибка если передать не число
ValueError: invalid literal for int()

Ошибка 3: Использование без импорта модуля

print(sys.argv[1])  # Модуль sys не импортирован
NameError: name 'sys' is not defined

Решение - всегда проверять длину списка и обрабатывать исключения.

История изменений

В Python 3.x sys.argv не претерпел значительных изменений по сравнению с Python 2.x, кроме того, что в Python 3 все строки являются Unicode.

Важное изменение произошло в Python 3.10: улучшена обработка аргументов в подпроцессах, но интерфейс sys.argv остался прежним.

В последних версиях Python рекомендуется использовать argparse для новых проектов, хотя sys.argv сохраняется для обратной совместимости.

Расширенные примеры

Пример 1: Обработка ключей и значений

Пример python
import sys
args = sys.argv[1:]
params = {}
for i in range(0, len(args), 2):
    if args[i].startswith('--'):
        params[args[i][2:]] = args[i+1]
print(params)
# Запуск: python script.py --name Ivan --age 30
{'name': 'Ivan', 'age': '30'}

Пример 2: Чтение файла из аргумента

Пример python
import sys
if len(sys.argv) > 1:
    with open(sys.argv[1], 'r') as f:
        print(f.read())
# Запуск: python script.py data.txt
Содержимое файла...

Пример 3: Комбинирование с argparse для обратной совместимости

Пример python
import sys, argparse
parser = argparse.ArgumentParser()
parser.add_argument('file')
if len(sys.argv) > 1:
    args = parser.parse_args()
    print('Обработка файла:', args.file)
# Запуск: python script.py data.txt
Обработка файла: data.txt

Пример 4: Передача аргументов в функцию

Пример python
import sys
def process_args(args):
    return sum(int(x) for x in args)
if __name__ == '__main__':
    result = process_args(sys.argv[1:])
    print('Результат:', result)
# Запуск: python script.py 1 2 3
Результат: 6

Пример 5: Эмуляция поведения команд

Пример python
import sys
commands = {'start': 'Запуск', 'stop': 'Остановка'}
if len(sys.argv) > 1 and sys.argv[1] in commands:
    print(commands[sys.argv[1]])
# Запуск: python script.py start
Запуск

питон sys.argv function comments

En
Sys.argv List of command line arguments passed to a Python script