【问题标题】:How do I access command line arguments?如何访问命令行参数?
【发布时间】:2022-01-19 05:16:15
【问题描述】:

我使用 python 来创建我的项目设置设置,但我需要帮助来获取命令行参数。

我在终端上试过这个:

$python myfile.py var1 var2 var3

在我的 Python 文件中,我想使用所有输入的变量。

【问题讨论】:

    标签: python command-line command-line-arguments


    【解决方案1】:

    Python tutorial explains it:

    import sys
    
    print(sys.argv)
    

    更具体地说,如果您运行 python example.py one two three:

    >>> import sys
    >>> print(sys.argv)
    ['example.py', 'one', 'two', 'three']
    

    【讨论】:

      【解决方案2】:

      只获取命令行参数

      (不包括 Python 文件名)

      import sys
      
      sys.argv[1:]
      

      [1:] 是一个slice,从第二个元素(索引 1)开始,一直到参数列表的末尾。这是因为第一个元素是 Python 文件的名称,我们要删除它。

      【讨论】:

      • [1:] 是什么意思?
      • @KolobCanyon 它的意思是“从索引 1 到结尾取一个子列表”,即跳过第一个元素
      • @KolobCanyon 将第二个参数[1:] 向上取,因为sys.argv 的第一个参数默认是您正在运行的python 文件的名称,例如testrun.py
      【解决方案3】:

      我强烈推荐argparse,它随 Python 2.7 及更高版本一起提供。

      argparse 模块减少了样板代码并使您的代码更加健壮,因为该模块处理所有标准用例(包括子命令),为您生成帮助和用法,检查和清理用户输入 - 您的所有内容使用sys.argv 方法时不必担心。而且它是免费的(内置)。

      这里是一个小例子:

      import argparse
      
      parser = argparse.ArgumentParser("simple_example")
      parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
      args = parser.parse_args()
      print(args.counter + 1)
      

      以及python prog.py -h的输出

      usage: simple_example [-h] counter
      
      positional arguments:
        counter     counter will be increased by 1 and printed.
      
      optional arguments:
        -h, --help  show this help message and exit
      

      对于python prog.py 1,正如您所料:

      2
      

      【讨论】:

      • 高质量的答案,不确定为什么这里的人会使用这里给出的任何其他方法。 特别是,因为它是内置的!难道你们没有比解析更好的事情吗?
      • 只是提到你应该如何访问 args 命名空间中的特定参数:args.counter
      • @Bassinator 在不需要解析参数的情况下。
      • 使用默认值,在命令行中没有具体值,你可以使用类似:parser.add_argument('var3', nargs='?', type=int, default=3) var3 是可选参数,如果你没有在命令行中指定值,你可以在您的代码中访问 var3,var3=3 的默认值
      • 可以输入intfloat吗?
      【解决方案4】:

      Python 代码:

      import sys
      
      # main
      param_1= sys.argv[1] 
      param_2= sys.argv[2] 
      param_3= sys.argv[3]  
      print 'Params=', param_1, param_2, param_3
      

      调用:

      $python myfile.py var1 var2 var3
      

      输出:

      Params= var1 var2 var3 
      

      【讨论】:

        【解决方案5】:

        您可以使用sys.argv 以列表形式获取参数。

        如果你需要访问单个元素,你可以使用

        sys.argv[i]  
        

        i 是索引,0 会给你正在执行的 python 文件名。之后的任何索引都是传递的参数。

        【讨论】:

          【解决方案6】:

          如果你这样称呼它:$ python myfile.py var1 var2 var3

          import sys
          
          var1 = sys.argv[1]
          var2 = sys.argv[2]
          var3 = sys.argv[3]
          

          与数组类似,您也有sys.argv[0],它始终是当前工作目录。

          【讨论】:

          • sys.argv[0] 不是当前工作目录。它是正在执行的文件的名称。
          【解决方案7】:

          我能想到的一些额外的事情。

          正如@allsyed 所说,sys.argv 给出了一个组件列表(包括程序名称),所以如果你想知道通过命令行传递的元素的数量,你可以使用 len() 来确定它。基于此,如果用户没有传递特定数量的参数,您可以设计异常/错误消息。

          另外,如果您正在寻找一种更好的方式来处理命令行参数,我建议您查看https://docs.python.org/2/howto/argparse.html

          【讨论】:

            【解决方案8】:

            首先,您需要导入 sys

            sys - 系统特定的参数和功能

            该模块提供对解释器使用和维护的某些变量的访问,以及对与解释器进行强交互的函数的访问。该模块仍然可用。如果这个模块不再工作,我会编辑这篇文章。

            然后,您可以在此处打印参数的数量或您想要的参数列表。

            按照下面的脚本:

            #!/usr/bin/python
            
            import sys
            
            print 'Number of arguments entered :' len(sys.argv)
            
            print 'Your argument list :' str(sys.argv)
            

            然后,运行你的 python 脚本:

            $ python arguments_List.py chocolate milk hot_Chocolate
            

            你会得到你所要求的结果:

            Number of arguments entered : 4
            Your argument list : ['arguments_List.py', 'chocolate', 'milk', 'hot_Chocolate']
            

            希望对某人有所帮助。

            【讨论】:

              【解决方案9】:

              应该使用sys(系统)模块。 参数是 str 类型并且在一个数组中

              注意 : argv 不是函数或类,是可变的并且可以更改

              注意:argv[0] 是文件名

              注意:因为python用c写,C有main(int argc, char *argv[]);但是 sys 模块中的 argc 没有退出

              注意 : sys 模块被命名为 System 并用 C 语言编写,它不是基于源的模块

              from sys import argv # or
              from sys import * # or
              import sys 
              
              # code
              print("is list") if type(sys.argv) == list else pass #  is list ,or
              print("is list") if type(argv) == list else pass # is list
              # arguments are str ( string )
              print(type(sys.argv[1])) # str
              # command : python filename.py 1 2 3
              print(len(sys.argv)) # 3
              print(sys.argv[1],'\n',sys.argv[2]'\n',sys.argv[3]) # following
              '''
              1
              2
              3
              '''
              # command : python filename.py 123
              print(len(sys.argv)) # 1
              print(sys.argv[1]) # following
              '''
              123
              '''
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-07-24
                • 2013-07-16
                • 2017-09-08
                • 1970-01-01
                • 2012-09-01
                相关资源
                最近更新 更多