运行我的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会自动地为每个样本中的个体排除五个数字。
答案 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])