sys.argv Python

Содержание
Введение
Пример
Необязательный аргумент
Пример 2
В других языках
Похожие статьи

Введение

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

Про обычные аргументы читайте статью *args, **kwargs

Пример

Чтобы передать аргументы в Python скрипт из командной строки нужно воспользоваться библиотекой sys

import sys

Далее каждый аргумент нужно принимать с помощью sys.argv

a = sys.argv[1]

Пример: скрипт add.py

import sys first = sys.argv[1] second = sys.argv[2] print(f"{first} + {second} = {first + second}")

python3 add.py topbicycle .ru

topbicycle + .ru = topbicycle.ru

Чтобы проделать то же самое с целыми числами - используем функцию int() так как даже если передать числа, они будут получены как строки.

import sys first = int(sys.argv[1]) second = int(sys.argv[2]) print(f"{first} + {second} = {first + second}")

python3 add.py 3 4

3 + 4 = 7

Необязательный аргумент

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

import sys if len(sys.argv) == 2: a = sys.argv[1] else: a = "default" print("a =", a) print(type(a))

python sysargs.py 2

a = 2 <class 'str'>

python sysargs.py

a = default <class 'str'>

Пример 2

Рассмотрим скрипт words.py из курса от Pluralsight

import sys from urllib.request import urlopen def fetch_words(url): # story = urlopen("http://sixty-north.com/c/t.txt") story = urlopen(url) story_words = [] for line in story: line_words = line.decode("utf8").split() for word in line_words: story_words.append(word) story.close() return story_words def print_words(story_words): for word in story_words: print(word) def main(): url = sys.argv[1] words = fetch_words(url) print_words(words) if __name__ == "__main__": main()

Этот скрипт не будет работать если не передать нужный url через терминал

python words3.py "http://sixty-north.com/c/t.txt"

Желательно также предусмотреть вызов функции main() после импорта.

В текущем виде будут проблемы

python

Python 3.9.5 (default, Jun 15 2021, 15:30:04) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information.

>>> from words import *
>>> main()

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/andrei/python/words.py", line 23, in main url = sys.argv[1] IndexError: list index out of range

>>> main("http://sixty-north.com/c/t.txt")

Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: main() takes 0 positional arguments but 1 was given

Решается проблема добавлением sys.argv[1] в вызов main

def main(url): words = fetch_words(url) print_words(words) if __name__ == "__main__": main(sys.argv[1])

В других языках

В C аналогичную функцию выполняет int argc, char* argv[]

В Bash это встроено по умолчанию .

Похожие статьи
Python
Интерактивный режим
str: строки
\: перенос строки
Списки []
if, elif, else
Циклы
Функции
try except
Пакеты
*args **kwargs
ООП
enum
Опеределить тип переменной Python
Тестирование с помощью Python
Работа с REST API на Python
Файлы: записать, прочитать, дописать, контекстный менеджер…
Скачать файл по сети
SQLite3: работа с БД
datetime: Дата и время в Python
json.dumps
Selenium + Python
Сложности при работе с Python
DJANGO
Flask
Скрипт для ZPL принтера
socket :Python Sockets
Виртуальное окружение
subprocess: выполнение bash команд из Python
multiprocessing: несколько процессов одновременно
psutil: cистемные ресурсы
PyCharm: IDE
pydantic: валидация данных
paramiko: SSH из Python
enumerate
logging: запись в лог
Обучение программированию на Python
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......