如何在 python 中通过命令行给出元组
how to give tuple via command line in python
我必须通过命令行输入几个参数。例如通过命令行的 tileGridSize、clipLimit 等。这就是我的代码的样子;
#!/usr/bin/env python
import numpy as np
import cv2 as cv
import sys #import Sys.
import matplotlib.pyplot as plt
img = cv.imread(sys.argv[1], 0) # reads image as grayscale
clipLimit = float(sys.argv[2])
tileGridSize = tuple(sys.argv[3])
clahe = cv.createCLAHE(clipLimit, tileGridSize)
cl1 = clahe.apply(img)
# show image
cv.imshow('image',cl1)
cv.waitKey(0)
cv.destroyAllWindows()
如果我像下面这样传递参数(我想给出 (8, 8) 元组);
python testing.py picture.jpg 3.0 8 8
我收到以下错误。我明白这个错误,但不知道如何解决它。
TypeError: function takes exactly 2 arguments (1 given)
我建议您查看 argparse
,这是处理 command-lines 的标准包,但严格使用 sys.argv
:
import sys
print(sys.argv[1], float(sys.argv[2]), tuple(map(int, sys.argv[3:])))
$ python testing.py picture.jpg 3.0 8 8
> picture.jpg 3.0 (8, 8)
会发生什么:
sys.argv[3:]
获取所有参数的列表,包括第 4 个和之后的参数(索引 3
)
map(int, sys.argv[3:])
将 int
函数应用于列表中的所有项目
tuple(...)
将 map
的生成器转换为适当的元组
我必须通过命令行输入几个参数。例如通过命令行的 tileGridSize、clipLimit 等。这就是我的代码的样子;
#!/usr/bin/env python
import numpy as np
import cv2 as cv
import sys #import Sys.
import matplotlib.pyplot as plt
img = cv.imread(sys.argv[1], 0) # reads image as grayscale
clipLimit = float(sys.argv[2])
tileGridSize = tuple(sys.argv[3])
clahe = cv.createCLAHE(clipLimit, tileGridSize)
cl1 = clahe.apply(img)
# show image
cv.imshow('image',cl1)
cv.waitKey(0)
cv.destroyAllWindows()
如果我像下面这样传递参数(我想给出 (8, 8) 元组);
python testing.py picture.jpg 3.0 8 8
我收到以下错误。我明白这个错误,但不知道如何解决它。
TypeError: function takes exactly 2 arguments (1 given)
我建议您查看 argparse
,这是处理 command-lines 的标准包,但严格使用 sys.argv
:
import sys
print(sys.argv[1], float(sys.argv[2]), tuple(map(int, sys.argv[3:])))
$ python testing.py picture.jpg 3.0 8 8
> picture.jpg 3.0 (8, 8)
会发生什么:
sys.argv[3:]
获取所有参数的列表,包括第 4 个和之后的参数(索引3
)map(int, sys.argv[3:])
将int
函数应用于列表中的所有项目tuple(...)
将map
的生成器转换为适当的元组