argparse конкатенация опций cli - PullRequest
1 голос
/ 08 января 2011

Просто начинаю изучать python и поиграюсь с передачей параметров командной строки в скрипт python. Я пытаюсь объединить два или более аргумента и передать его в строковую переменную,

например.,

myscript.py http://www.domain.com 1234

поместите его в строковую переменную с именем url, которая должна иметь значение "http://www.domain.com:1234"

Я не совсем уверен, как архивировать это. Это довольно просто сделать с помощью raw_input и некоторыми манипуляциями со строками, но мне интересно, можно ли это сделать также с помощью argparse.

Ответы [ 6 ]

7 голосов
/ 08 января 2011
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('server') # first positional argument
parser.add_argument('port') # second positional argument
args = parser.parse_args()

url = '%s:%s' % (args.server, args.port)
print url
2 голосов
/ 08 января 2011

argparse - один из способов ее решения, но он может быть излишним, если вы только учитесь (YMMV).

Если вы импортируете модуль sys, переданные вам аргументы командной строки будут доступны в списке строк по адресу sys.argv

import sys
if len(sys.argv) < 3:
    print "Not enough args!"
    sys.exit(0)
# sys.argv[0] is the name of your script, the rest are parameters
url = "%s:%s" % (sys.argv[1], sys.argv[2])
print url
1 голос
/ 08 января 2011

Почему бы не сделать,

argstring = ':'.join(args[1:])
0 голосов
/ 08 января 2011

просто немного запутался с этой строкой "url = '% s:% s'% (args.link, args.port) "эта строка берет аргументы в скобках и добавить его в строковая переменная 'url'?

Этот формат на самом деле больше не рекомендуется. (см. http://docs.python.org/tutorial/inputoutput.html). Самый простой способ сделать то же самое с рекомендуемым в настоящее время методом будет: -

url = '{0}:{1}'.format( args.link , args.port )

где {n} - это n-я переменная в формате (переменные). Этот метод всегда преобразует аргументы в строку для вас.

Более старый метод, использующий% s, делает то же самое; значение 's' превращает аргумент в строку, но в строке должно быть ровно столько же флагов% s, сколько аргументов после знака% после строки Не беспокойтесь об этом, но если вы учитесь, используйте .format ().

0 голосов
/ 08 января 2011

Спасибо, Янтарь,

это было именно то, что я искал

#!/usr/bin/python

from urllib import urlopen
import argparse

usage='will be using it later'

parser=argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description=usage, add_help=False)
parser.add_argument('link')
parser.add_argument('port')
args = parser.parse_args()

url = '%s:%s' % (args.link, args.port)
link = urlopen(url)
content=link.read()

print(content)

немного запутался в этой строке "url = '% s:% s'% (args.link, args.port)" эта строка принимает аргументы в скобках и добавляет их в строковую переменную 'url'?

Jack

0 голосов
/ 08 января 2011

Если вам нужна переменная со строкой http://www.domain.com:1234 из ввода командной строки, выполните следующие действия:

if len(sys.argv) >= 3:
    result = '%s:%s' % tuple(sys.argv[1:3])
...