Подтвердить что ты не робот

Аргументы командной строки в python.

Я знаком с C и начал экспериментировать на python. Мой вопрос касается команды sys.argv. Я читал, что он используется для интерпретатора командной строки, но при попытке выполнить простую программу я не получаю ожидаемых результатов.

код:

import sys

a = sys.argv[1]
b = sys.argv[2]

print a, b

print a+b

Input:

python mySum.py 100 200

Выход:

100 200
100200

Когда я добавляю два аргумента, они объединяются вместо двух значений, добавляемых вместе. Кажется, что значения берутся как строки.

Как я могу интерпретировать их как числовые данные?

4b9b3361

Ответ 1

Вы можете преобразовать аргументы в целые числа, используя int()

import sys

a = int(sys.argv[1])  b = int(sys.argv[2])

print a, b

print a+b

input: python mySum.py 100 200

выход:

100 200
300

Ответ 2

В самом деле, вы сами нашли проблему, sys.argv - это массив строк.

Вы можете преобразовать строку в целое число с int(). В этом случае, например: a = int(sys.argv[1])

Ответ 3

Вы также должны подтвердить ввод пользователя:

import sys

def is_intstring(s):
    try:
        int(s)
        return True
    except ValueError:
        return False

for arg in sys.argv[1:]:
    if not is_intstring(arg):
        sys.exit("All arguments must be integers. Exit.")

numbers = [int(arg) for arg in sys.argv[1:]]
sum = sum(numbers)

print "The sum of arguments is %s" % sum

Ответ 4

sys.argv элементы всегда strings. вы должны отнести их к int с помощью int(a).

Вы также можете использовать сторонние библиотеки для обработки аргументов CLI, таких как OptParse.

Ответ 5

В Python строки неявно преобразуются в целые числа. Попробуйте

num1 = int(sys.argv[1])
This would represent the numerical value of the number, not its string representation.

Ответ 6

Остерегайтесь выполнения сравнений с аргументами командной строки, что может привести к действительно неожиданному поведению из-за политики Python 2 для сравнения объектов разных типов ('int'<'list'<'string'<'tuple'), как указано здесь. В Python 3 сравнение объектов разных типов приведет к TypeError.

Для примера погрешности сравнения объектов попробуйте удалить вызов int() в разделе 6.1.1. Python учебник Fibonacci code, и вы получите бесконечный цикл, поскольку условие while while: 'int' < "Строка". (Это не произойдет в Perl, кстати).

Отличный совет от @Jan-Philip выше, чтобы проверить аргументы командной строки, даже для Python 3.