【问题标题】:python sys.argv in classes name.py [list of integers 2, 4,..], integerpython sys.argv in classes name.py [list of integers 2, 4,..], integer
【发布时间】:2021-03-16 04:48:20
【问题描述】:

我想传递 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 class command-line-arguments argv sys


    【解决方案1】:

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

    $ 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])
    

    这意味着 args 30 50 将被转换为 python 列表对象(包含 int),最后一个参数(在本例中为 13)将被视为 int。

    【讨论】:

      【解决方案2】:

      运行

      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
      

      【讨论】:

      • 抱歉,我并不完全清楚如何编辑我的代码:class MySeq():def __init__(self):`self.positions = sys.argv[1].split(',') # 8,10 to ['8', '10']` ` self.length = int(sys.argv[2]) # 32`
      • + 我需要如何编辑终端输入的代码,例如:python MySeq.py [8, 10] 32
      猜你喜欢
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-27
      相关资源
      最近更新 更多