【问题标题】:Python: Create a tuple from a command line inputPython:从命令行输入创建一个元组
【发布时间】:2011-05-10 22:19:52
【问题描述】:

我有一个程序提供这样的命令行输入:

python2.6 prog.py -p a1 b1 c1

现在,我们可以有任意数量的输入参数,即 -p a1 和 -p a1 c1 b1 e2 都是可能的。

我想根据可变输入参数创建一个元组。关于如何做到这一点的任何建议都会非常有帮助!固定长度的元组很容易,但我不确定如何实现可变长度的元组。

谢谢。

【问题讨论】:

标签: python command command-line-arguments tuples


【解决方案1】:

元组的长度是固定的。一旦创建了一个元组,就不能修改它。

命令行参数存储在列表中。

import sys
t = tuple(sys.argv[1:]) # since sys.argv[0] is the name of the script

【讨论】:

    【解决方案2】:

    应该这样做:

    import sys
    t = tuple(sys.argv)
    

    既然您可能不想要脚本名称,那么您可能想要这样做:

    if len(sys.argv) > 1:
        t = tuple(sys.argv[1:])
    

    【讨论】:

    • 如果len(l) < nl[n-1:] 将给出[]tuple([]) 是 0 元组 ()。 -> 不需要这个检查。
    【解决方案3】:

    遍历sys.argv,直到到达另一个标志。

    【讨论】:

      【解决方案4】:

      您可以使用 tuple() 构造函数将列表转换为元组:

      >>> tuple([1, 2, 3, 4])
      (1, 2, 3, 4)
      

      在 sys.argv =) 上使用它,或者它的一部分。 干杯!

      【讨论】:

        【解决方案5】:

        你为什么不看看不久前的*args and **kwargs 讨论?

        【讨论】:

          【解决方案6】:
          import sys
          
          t1 = tuple(sys.argv)
          t2 = tuple(sys.argv[1:])
          
          print t1
          print t2
          

          【讨论】:

            【解决方案7】:

            您可以使用 getopt 从命令行获取参数。它返回一个 args 列表,然后您可以使用 tuple() 将其转换为元组

            import getopt
            import sys
            
            def main(argv):
                opts, args = getopt.getopt(argv, 'p')
                return tuple(args)
            if __name__=='__main__':
                main(sys.argv[1:])
            

            http://www.faqs.org/docs/diveintopython/kgp_commandline.html

            【讨论】:

              【解决方案8】:

              您的确切问题的正确答案是tuple(sys.argv[1:]),但有更好的方法来获取命令行参数,以便您可以更恰当地使用它们。试试optparsehttp://www.doughellmann.com/PyMOTW/optparse/

              如果您使用的是 Python 2.7,则应使用 argparse

              【讨论】:

                猜你喜欢
                • 2011-12-02
                • 2023-04-06
                • 1970-01-01
                • 2014-04-20
                • 1970-01-01
                • 2014-05-11
                • 1970-01-01
                • 2018-01-01
                • 1970-01-01
                相关资源
                最近更新 更多