【问题标题】:More effective way of passing several arguments to script?将多个参数传递给脚本的更有效方法?
【发布时间】:2016-08-31 08:05:41
【问题描述】:

我的命令行脚本接受多个参数,包括字符串、整数、浮点数和列表,使用所有参数进行调用变​​得有点棘手:

python myscript.py arg1 arg2 arg3 ... argN

为了避免在命令行中写入所有参数,我创建了一个包含所有参数的文本文件,我只需逐行读取以收集参数。这工作正常,但这是这样做的最佳做法吗?有没有更有效的方法?

【问题讨论】:

  • argparse 非常棒,因为它允许您将命令行参数放入文件中并从那里读取,这在参数数量开始变得笨拙时很有用...但是如果您有很多你想改变的东西,你最好使用某种结构化的初始化文件(例如configparser
  • 这真的取决于使用情况。如果用户每次都必须输入这些参数,那么文件可能不太容易出错。如果参数不经常更改,那么您可以使用环境变量,但这可能会很混乱,所以我不建议这样做。您可以从stdin 读取数据,然后将值通过管道输入或使用此处的文档(用于传递嵌入数据的外壳设备)。您能否澄清一下程序是如何被调用的,即从命令行还是脚本?
  • @cdarke 现在我通过python myscript.py input_args.txt 使用包含我的参数的文本文件调用程序

标签: python arguments parameter-passing


【解决方案1】:

【讨论】:

    【解决方案2】:

    对我来说,我认为 python getopt 是要走的路。

    #!/usr/bin/python
    
    import sys, getopt
    
    def main(argv):
       inputfile = ''
       outputfile = ''
       try:
          opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
       except getopt.GetoptError:
          print 'test.py -i <inputfile> -o <outputfile>'
          sys.exit(2)
       for opt, arg in opts:
          if opt == '-h':
             print 'test.py -i <inputfile> -o <outputfile>'
             sys.exit()
          elif opt in ("-i", "--ifile"):
             inputfile = arg
          elif opt in ("-o", "--ofile"):
             outputfile = arg
       print 'Input file is "', inputfile
       print 'Output file is "', outputfile
    
    if __name__ == "__main__":
       main(sys.argv[1:])
    

    用法:

    usage: test.py -i <inputfile> -o <outputfile>
    

    如果您有参数名称,则运行起来会更容易。

    参考:http://www.tutorialspoint.com/python/python_command_line_arguments.htm

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2017-05-08
      • 1970-01-01
      • 2011-05-30
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      相关资源
      最近更新 更多