1

因此,我被困在一個我正在處理的項目中,涉及到python中的命令行。Python命令行參數:調用函數

所以基本上,這裏就是我試圖完成:

我在一個類中,比如一組功能,

def do_option1(self, param1, param2) : 
    #some python code here 

def do_option2(self, param1): 
    #some python code here 

def do_option3(self, param1, param2, param3): 
    #some python code here 

所以基本上,當用戶將filename.py option2 param1進入命令行中,我希望它調用函數do_option2並將參數param1傳遞給它。

同樣,當用戶放置filename.py option3 param1 param2 param3時,我希望它用給定的參數執行do_option3函數。

我知道Python中有兩個模塊,分別叫做​​和optparse,但是我很難理解這兩者,我不確定兩個人中的哪一個能夠完成我所需要的。

+0

http://stackoverflow.com/questions/817087/call-a-function-with-argument-list-in-python –

+0

從學習的角度來看,我建議首先得到您的信息直接從'sys.argv'。您可以使用一系列if語句或字典調度。如果您需要添加更多選項,請花時間學習'argparse'。你的問題很適合'subparsers'模型。 – hpaulj

回答

5

使用​​子解析器

p = argparse.ArgumentParser() 
subparsers = p.add_subparsers() 

option1_parser = subparsers.add_parser('option1') 
# Add specific options for option1 here, but here's 
# an example 
option1_parser.add_argument('param1') 
option1_parser.set_defaults(func=do_option1) 

option2_parser = subparsers.add_parser('option2') 
# Add specific options for option1 here 
option2_parser.set_defaults(func=do_option2) 

option3_parser = subparsers.add_parser('option3') 
# Add specific options for option3 here 
option3_parser.set_defaults(func=do_option3) 

args = p.parse_args() 
args.func(args) 

然後你的每一個do_option功能將需要略微改寫,以一個參數從中可以提取它需要的值。例如:

def do_option1(args): 
    param1 = args.param1 
    # And continue 
0

如果您想直接傳遞參數,而使用標籤,你可以只使用sys模塊:sys.argv會給你['filename.py', 'option3', 'param1', 'param2', 'param3']filename.py option3 param1 param2 param3

http://www.tutorialspoint.com/python/python_command_line_arguments.htm

+0

嗨!感謝您的迴應。所以在我的主要功能,我有, 接口=接口() interface.prompt( 「>」) interface.cmdloop( 「啓動提示...」) 接口與功能的類。 因此,用sys.argv我可以調用某個函數,並同時傳遞這些參數? – lc2958

+0

只需使用if語句來決定調用哪個函數:'if sys.argv [1] =='option3':'等等 – kponz

+0

'sys.argv'包含所有的命令行元素,所以你可以從它解析任何作爲參數添加到命令行的任何東西 – kponz

1
options = { 
    'option_1': my_class.option_1, 
    'option_2': my_class.option_2, 
    'option_3': my_class.option_3, 
} 

option, params = sys.argv[0], sys.argv[1:] 
options[option](*params) 

命令行應該做的訣竅。您可能需要添加一些檢查以確保用戶至少將一些參數傳遞給腳本。

1

Execute function via arg

正如接受的答案所述,您可以(AB?)使用的add_argumenttype參數來執行功能。

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('option2', type=interface.do_option2) 

args = parser.parse_args() 
+1

良好的起點,但我認爲,最好使用[子命令](https://docs.python.org/2.7/library/argparse。 html?highlight = argparse#子命令)(如第二個最後一個例子)。 – Gall

1

我使用這個模板可以幫助你。

import argparse 

parser = argparse.ArgumentParser() 

parser.add_argument('--option1', help='description for option1') 
parser.add_argument('--option2', help='description for option2') 
parser.add_argument('--option3', help='description for option3') 

args = parser.parse_args() 

if args.option1: 
    ...do something 

if args.option2: 
    ...do something 

if args.option3: 
    ...do something 

然後,您可以運行你的腳本傳遞的參數是這樣的:

python script.py --option1 my-option1 --option3 my-option3 --option2 my-option2 

注意,因爲你指定其前值參數的名稱的參數的位置並不重要。