[英]Pass an array as command line argument to the script
我想從命令行實驗代碼,所以導入argv
表單sys
。
from sys import argv
def binary_search(array, item):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2 # round down if not an even
guess = array[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
def main():
script, array, item = argv
binary_search(array, item)
在命令行上運行時:
$ python3 binary_search.py [1, 2, 3] 8
Traceback (most recent call last): File "binary_search.py", line 94, in <module>
main() File "binary_search.py", line 89, in main
script, array, item = argvValueError: too many values to unpack (expected 3)
我測試並發現從命令行傳遞的參數被argv視為str。
如何將數組作為參數傳遞?
有幾種不同的方法可以做到這一點......
使用正則表達式可能是處理此問題的最簡單方法之一。
from sys import argv
import re
def binary_search(array, item):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2 # round down if not an even
guess = array[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
def main():
array = re.findall(r"[\w]+", argv[1])
array = [int(i) for i in array]
item = int(argv[2])
binary_search(array,item)
if __name__== "__main__":
main()
你也可以使用exec()
,這可能更危險和復雜。 這是一個簡單的例子:
from sys import argv
command = 'mylist = {0}'.format(argv[1])
exec(command)
for item in mylist:
print(item)
示例輸出:
C:\path>py foo.py [1,2,3]
1
2
3
命令行上的參數是字符串,它們不像程序中的文字那樣被解析。
argv從命令行參數自動構造字符串到列表(由空格分隔),簡而言之, sys.argv
是一個列表。
另外,模塊argparse有幫助
argparse模塊可以輕松編寫用戶友好的命令行界面。 程序定義了它需要的參數,argparse將弄清楚如何解析sys.argv中的參數。 當用戶給程序提供無效參數時,argparse模塊還會自動生成幫助和使用消息並發出錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.