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: Обработка ключей и значений
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: Чтение файла из аргумента
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 для обратной совместимости
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: Передача аргументов в функцию
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: Эмуляция поведения команд
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 Запуск