Python, ошибка параметра аргумента с модулем sys

#python #cmd #parameters #arguments #system

#python #cmd #параметры #аргументы #система

Вопрос:

Я пытаюсь получить аргументы в python с помощью модуля sys. Вот мой код:

 import sys
import os
path = sys.argv[0]
argument = sys.argv[1]
print("Hello, Temal Script installed.")
if argument == "-h":
    os.system("cls")
    print("Available comamnds:n-h = helpn-i = informationn-v = version")
if argument == "-i":
    os.system("cls")
    print("This is a script written by Temal")
if argument == "-v":
    os.system("cls")
    print("Version: 1.0")
 

Если я введу в cmd «main.py -h» это отлично работает. Но если я введу только «main.py » он выводит мне сообщение об ошибке:

 Traceback (most recent call last):
  File "C:Windowscmd.py", line 5, in <module>
    argument = sys.argv[1]
IndexError: list index out of range
 

Я знаю, почему я получаю эту ошибку, потому что в списке будет только один элемент (путь), потому что я не ввожу второй аргумент. Но как я могу сделать, чтобы скрипт игнорировал эту ошибку, если второй аргумент не задан? Если кто-то вводит main.py без аргументов я только хочу распечатать этот текст: Здравствуйте, установлен скрипт Temal.
Или, может быть, есть что-то вроде в PHP «isset»?
Я тоже новичок в этой теме, поэтому, пожалуйста, отвечайте просто и не сложно.
Спасибо!

Комментарии:

1. индекс списка вне диапазона означает, что указанное значение индекса еще не объявлено .. его нет в объявленном вами массиве!

2. да, так как же мне игнорировать эту ошибку, если она не объявлена?

3. добавьте проверку .. для проверки длины массива

Ответ №1:

Необходимо проверить длину sys.argv переменной.

 import sys
import os

path = sys.argv[0]
if len(sys.argv) > 1:
    argument = sys.argv[1]
    print("Hello, Temal Script installed.")
    if argument == "-h":
        os.system("cls")
        print("Available comamnds:n-h = helpn-i = informationn-v = version")
    elif argument == "-i":
       os.system("cls")
       print("This is a script written by Temal")
    elif argument == "-v":
        os.system("cls")
        print("Version: 1.0")
 

Кроме того, посмотрите на модуль argparse.

 import argparse
import os

parser = argparse.ArgumentParser(description="My App")
parser.add_argument('-i', '--info', action='store_true',
    help="show information")
parser.add_argument('-v', '--version', action='store_true',
    help="show version")
args = parser.parse_args()

if args.info:
    os.system("cls")
    print("This is a script written by Temal")
elif args.version:
    os.system("cls")
    print("Version: 1.0")
 

Запуск main.py -h выводит:

 usage: help.py [-h] [-i] [-v]

My App

optional arguments:
  -h, --help     show this help message and exit
  -i, --info     show information
  -v, --version  show version
 

Комментарии:

1. Большое вам спасибо, это сработало!