2011-01-07 34 views
1

剛開始學習python並將命令行選項傳遞給python腳本。我試圖連接兩個或多個參數,並把它傳遞給一個字符串變量,argparse連接cli選項

例如,

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

把它到名爲url一個字符串變量,然後應該有「的價值http://www.domain.com:1234

我對如何歸檔不太清楚。用raw_input和一些字符串處理很簡單,但我不知道這是否也可以用​​來完成。

+0

你有什麼試過?在這種情況下,似乎argparse並非全部有用。 – Falmarri

回答

6
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

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 
+0

有趣的是,這個argparse的例子實際上如何短得多;) – delnan

+0

@delnan - 是的,那樣會削弱我的「爲什麼要打擾argparse?」參數... – bgporter

+1

雖然argparse似乎相當強大,但看看http://docs.python.org/dev/library/argparse.html上的例子有點令人難以置信,特別是如果您剛開始使用該語言。 – user567538

0

如果你想在命令行輸入字符串http://www.domain.com:1234一個變量然後做以下:

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

爲什麼不這樣做,

argstring = ':'.join(args[1:]) 
0

由於琥珀,

這正是我一直在尋找

#!/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'?

傑克

+0

http://docs.python.org/library/stdtypes.html#string-formatting – jfs

0

只是有點困惑與此行 「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()。