2013-09-05 3 views
-3

Я новичок в python, но работает на разных языках.Передача переменной python в функцию

#!/usr/bin/python 
import sys 
import netaddr 
print(sys.argv[1]) 
cidrs = netaddr.iprange_to_cidrs(sys.argv[1]) 
print cidrs 

выход:

./script.py \"223.252.0.0\",\"223.252.127.255\" 
"223.252.0.0","223.252.127.255" 
Traceback (most recent call last): 
    File "./script.py", line 7, in <module> 
    cidrs = netaddr.iprange_to_cidrs(sys.argv[1]) 
TypeError: iprange_to_cidrs() takes exactly 2 arguments (1 given) 
+0

Вы потрудились прочитать [документацию] (http://pythonhosted.org/netaddr/api.html#netaddr.iprange_to_cidrs)? – BrenBarn

+0

Да, я это сделал. Но вопрос не связан с netaddr – user2079197

+4

Да, это потому, что документация показывает, что вам нужно передать два аргумента этой функции, и вы передаете только один. – BrenBarn

ответ

1

Если вы действительно настаиваете на один аргумент командной строки, содержащие запятую,

#!/usr/bin/python 
import sys 
import netaddr 
input = sys.argv[1].split(",") 
print("%r" % input) 
cidrs = netaddr.iprange_to_cidrs(*input) 
print cidrs 

Это создает список Python двух строк из ряда одиночная строка, которая равна sys.argv[1], и передает ее iprange_to_cidrs. Это работает только в том случае, если в первом аргументе имеется ровно одна запятая. Моя рекомендация будет заключаться в использовании

cidrs = netaddr.iprange_to_cidrs(sys.argv[1], sys.argv[2]) 

как и другие, уже конформирующиеся.

Смежные вопросы