python sys.argv in 类 name.py [整数列表 2, 4,..], 整数

python sys.argv in classes name.py [list of integers 2, 4,..], integer

我想在终端中传递 2 个参数,一个作为列表 [8, 10],另一个作为整数。 文件 MySeq.py

赞:MySeq.py [8, 10], 32 我该怎么做?

import sys

class MySeq():
def __init__(self, positions, length):
    self.positions = positions  
    self.length = length


def length_fragments(self):
    diffs = []

    diffs.append(self.positions[0])
    for i in range(1, len(self.positions)):
        diffs.append((self.positions[i] - self.positions[i - 1]))
    diffs.append(self.length - self.positions[len(self.positions) - 1])

    return diffs

#positons = sys.argv[1].replace('[', ' ').replace(']', ' ').replace(',', ' ').split()
#positions = [int(i) for i in a]
#length = int(sys.argv[2])
print(MySeq(positions, length).length_fragments())

一种方法是像这样传递参数:

$ python filename.py 30 50 13

代码如下:

import sys
int_arg = int(sys.argv[-1])
list_from_args = list(sys.argv[1:-1])
for i in range(len(list_from_args)):
    list_from_args[i] = int(list_from_args[i])

这意味着参数 30 50 将被转换为 python 列表对象(包含 int)并且最后一个参数(在本例中为 13 )将被处理作为一个整数。

运行

python MySeq.py 8,10 32

因为sys.argv自动是一个字符串列表,所以用逗号分割成一个列表就可以了。

def __init__(self):
        self.positions = sys.argv[1].split(',') # 8,10 to ['8', '10']
        self.length = int(sys.argv[2]) # 32