Python脚本的可变参数数量

时间:2017-09-28 12:36:44

标签: python input

运行我的Python脚本的命令行是:

./parse_ms.py inputfile 3 2 2 2 

参数是输入,数字3是我的研究样本的数量,每个样本有2个人。

在脚本中,我指出如下参数:

inputfile = open(sys.argv[1], "r")
nsam = int(sys.argv[2])
nind1 = int(sys.argv[3])
nind2 = int(sys.argv[4])
nind3 = int(sys.argv[5])

但是,样本数量可能会有所不同。我可以:

./parse_ms.py input 4 6 8 2 20

在这种情况下,我有4个样本,每个样本分别有6个,8个,2个和20个。

添加另一个sys.argv样本似乎效率低下。有没有办法让这更通用?也就是说,如果我将nsam写成等于5,那么Python会自动地为每个样本中的个体排除五个数字。

3 个答案:

答案 0 :(得分:6)

您可以将sys.argv的其余部分slice简单地放入列表中。 e.g。

inputfile = open(sys.argv[1], "r")
num_samples = int(sys.argv[2])
samples = sys.argv[3:3+num_samples]

虽然如果这就是你的论点,你根本就不能传递一些样本而只是抓住一切。

inputfile = open(sys.argv[1], "r")
samples = sys.argv[2:]

之后可以将样本转换为正确的数据类型。

另外,请查看argparse以获得更好的处理命令行参数的方法。

答案 1 :(得分:0)

您可以拥有一份ninds列表,甚至可以通过以下方式捕获预测

try:
    ninds = [int(argv[i+3]) for i in range(int(argv[2]))]
except IndexError:
    print("Error. Expected %s samples and got %d" %(argv[2], len(argv[3:])))

答案 2 :(得分:-1)

好吧,你应该列一个清单:

import sys
inputfile = open(sys.argv[1]) # the second argument is by default "r", so you don't need to put it
nsam = int(sys.argv[2])
sams = []
for i in range(3, len(nsam)):
    sams.append(sys.argv[i])