我正在使用getopt來處理命令行可選參數,它應該接受一個列表。事情是這樣的:指定一個列表作爲python中的命令行參數
foo.py --my_list=[1, 2, 3, 4,5]
但這修剪後 「[1,」 一切
我的問題是: A)有沒有它轉換成字符串來指定列表的方式嗎? (使用getopt)
B)如果我要將列表轉換爲字符串,如何將此列表轉換爲字符串?例如像mylist.split(「?」)來擺脫方括號?有沒有更好的辦法?
謝謝
我正在使用getopt來處理命令行可選參數,它應該接受一個列表。事情是這樣的:指定一個列表作爲python中的命令行參數
foo.py --my_list=[1, 2, 3, 4,5]
但這修剪後 「[1,」 一切
我的問題是: A)有沒有它轉換成字符串來指定列表的方式嗎? (使用getopt)
B)如果我要將列表轉換爲字符串,如何將此列表轉換爲字符串?例如像mylist.split(「?」)來擺脫方括號?有沒有更好的辦法?
謝謝
也許你應該只是將引數括在引號中?
foo.py "--my_list=[1, 2, 3, 4,5]"
否則,每個空間將被視爲參數的分隔符。
而這還不是蟒蛇,因爲但由於其解析這些參數,並將其提供給Python程序外殼。 – extraneon 2010-01-18 14:29:02
部分屬實。在Windows上,命令行只是一個字符串。即使UNIX沒有任何將參數傳遞給程序的特殊數據結構,它仍然只是一個字符串。但是,這是一個廣泛實施的慣例,但並不普遍。是的,C運行時具有這方面的規格。 – Joey 2010-01-18 14:33:10
您也可以執行'--my-list =「[1,2,3,4,5]」'。我通常使用這種形式,因爲它通常就像'--my-list =「$ MY_LIST」'。 – 2010-01-18 14:43:14
從Python optparse的幫助頁面: 「
parser.add_option("-f")
parser.add_option("-p", type="float", nargs=3, dest="point")
在解析命令行
-f foo.txt -p 1 -3.5 4 -fbar.txt
optparse將設置
options.f = "foo.txt"
options.point = (1.0, -3.5, 4.0)
options.f = "bar.txt"
」
如果我不能用一個標準的解析器(optparse或argparse),以我的應用程序,然後我用ast.literal_eval函數解析式列表的輸入參數如下:
import sys, ast
inputList = ast.literal_eval(sys.argv[1])
print type(inputList)
print inputList
讓假設這個代碼存儲在testParser.py文件中。通過執行該腳本:
$ python testParser.py "[1,2,3,4, [123, 456, 789], 'asdasd']"
我們得到以下的輸出:
<type 'list'>
[1, 2, 3, 4, [123, 456, 789], 'asdasd']
因此,使用足夠安全ast.literal_eval功能和插入表作爲一串代碼,我們有理想的結果。
相關鏈接:
Using python's eval() vs. ast.literal_eval()?
http://docs.python.org/2/library/functions.html?highlight=eval#eval
更新的方法是使用argparse
庫並添加列表作爲命令行參數。這樣,您不必進行任何手動解析。
例子:
parser = argparse.ArgumentParser()
parser.add_argument(
"-values",
nargs="*", # expects ≥ 0 arguments
type=int,
default=[35, 40, 50, 60, 70, 80, 90], # default list if no arg value
)
,你會再打電話這樣的:
python3 someprogram.py -values 1 2 3
因爲這篇文章是5歲,'optparse'現在已被棄用''argparse' – SAAD 2015-09-04 13:06:43
你是什麼意思'使用append行動'?這聽起來令人興奮,但不確定你在說什麼。 – 2017-06-03 02:06:48
@MonicaHeddneck請參閱https://docs.python.org/3/library/optparse.html#standard-option-actions - 他們有一個「append」動作的例子:'parser.add_option(「 - t」,「 --tracks「,action =」append「,type =」int「)'。 – 2017-06-03 04:28:55