как я могу напечатать ошибку, если нет argv - PullRequest
2 голосов
/ 24 февраля 2020

Пожалуйста, помогите.

У меня есть ситуация, когда я хочу предоставить IP-адрес своему сценарию, и я хочу напечатать сообщение об ошибке, если адрес не указан.

    ip = sys.argv[1]


    if len(ip) == 13:
            print "IP address format correct"
    else:
            print "wrong IP format"
            exit()

Я знаю, что мне придется работать над длиной, но это на потом ...

Ответы [ 4 ]

3 голосов
/ 24 февраля 2020

Вы можете проверить, равна ли предоставленная длина args 2 или нет. Первым аргументом всегда является имя файла, хранящееся в argv[0]. Таким образом, вы должны проверить, если длина составляет 2 или более.

Попробуйте это:

if len(sys.argv) < 2:
    print("Please provide an IP to proceed.")
    sys.exit(0)

ip = sys.argv[1]


if len(ip) == 13:
    print "IP address format correct"
else:
    print "wrong IP format"
    exit()
1 голос
/ 24 февраля 2020

Попробуйте, он проверит, задан ли ip как ввод, а также проверит его.

1 голос
/ 24 февраля 2020

Используйте argparse и позвольте ему справиться с этим.

import argparse
import ipaddress


p = argparse.ArgumentParser()
p.add_argument("address", type=ipaddress.ip_address)

args = p.parse_args()  # Without an argument, parse sys.argv[1:]

Модуль ipaddress позаботится о проверке IP-адреса. В Python 2.7 вы можете вместо этого установить ipaddr и использовать его с некоторыми небольшими изменениями. (ipaddress - это слегка измененная версия ipaddr, включенная в стандартную библиотеку, начиная с Python 3.3.)

1 голос
/ 24 февраля 2020

Следующий код:

import sys

if __name__ == "__main__":
    # print the given IP to the script
    ip = sys.argv[1]
    print(ip)

    # your condition
    if len(ip) == 13:
        print("IP address format is correct")
    else:
        print("wrong IP format")
        exit()

сохранен как скрипт test.py вместе с вызовом скрипта как:

python3 test.py 255.255.255.0

или в Python 2.X

python test.py 255.255.255.0

будет делать больше, чем вы хотите, для примера ввода IP: 255.255.255.0

...