【问题标题】:argparse concatenate cli optionsargparse 连接 cli 选项
【发布时间】:2011-06-05 13:41:49
【问题描述】:

刚开始学习 python 并尝试将命令行选项传递给 python 脚本。我正在尝试连接两个或多个参数并将其传递给字符串变量,

例如,

myscript.py http://www.domain.com 1234

将其放入名为url 的字符串变量中,其值应为“http://www.domain.com:1234

我不太确定如何存档。使用raw_input 和一些字符串操作非常简单,但我想知道这是否也可以使用argparse 来完成。

【问题讨论】:

  • 你试过什么?在这种情况下,似乎 argparse 并不是那么有用。

标签: python argparse


【解决方案1】:
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('server') # first positional argument
parser.add_argument('port') # second positional argument
args = parser.parse_args()

url = '%s:%s' % (args.server, args.port)
print url

【讨论】:

    【解决方案2】:

    argparse 是解决它的一种方法,但如果您只是在学习 (YMMV),可能会有点矫枉过正。

    如果您导入 sys 模块,则传递给您的命令行参数在 sys.argv 的字符串列表中可用

    import sys
    if len(sys.argv) < 3:
        print "Not enough args!"
        sys.exit(0)
    # sys.argv[0] is the name of your script, the rest are parameters
    url = "%s:%s" % (sys.argv[1], sys.argv[2])
    print url
    

    【讨论】:

    • 有趣的是,argparse 示例实际上几乎一样短;)
    • @delnan -- 是的,这确实削弱了我的“为什么要打扰 argparse?”论据...
    • argparse 似乎非常强大,但查看 docs.python.org/dev/library/argparse.html 上的示例有点不知所措,尤其是如果您刚开始使用该语言。
    【解决方案3】:

    为什么不这样做,

    argstring = ':'.join(args[1:])
    

    【讨论】:

      【解决方案4】:

      如果您想从命令行输入带有字符串http://www.domain.com:1234 的变量,请执行以下操作:

      if len(sys.argv) >= 3:
          result = '%s:%s' % tuple(sys.argv[1:3])
      

      【讨论】:

        【解决方案5】:

        谢谢琥珀,

        这正是我想要的

        #!/usr/bin/python
        
        from urllib import urlopen
        import argparse
        
        usage='will be using it later'
        
        parser=argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description=usage, add_help=False)
        parser.add_argument('link')
        parser.add_argument('port')
        args = parser.parse_args()
        
        url = '%s:%s' % (args.link, args.port)
        link = urlopen(url)
        content=link.read()
        
        print(content)
        

        对“url = '%s:%s' % (args.link, args.port)”这一行有点困惑 该行是否将括号中的参数添加到字符串变量“url”中?

        杰克

        【讨论】:

          【解决方案6】:

          只是对这一行有点困惑 "url = '%s:%s' % (args.link, args.port)" 该行是否采用 括号中的参数并将其添加到 字符串变量'url'?

          实际上不再推荐这种格式。 (见http://docs.python.org/tutorial/inputoutput.html)。使用当前推荐的方法执行相同操作的最简单方法是:-

          url = '{0}:{1}'.format( args.link , args.port )
          

          其中 {n} 是 format( variables ) 中的第 n 个变量。此方法将始终为您将参数转换为字符串。

          使用 %s 的旧方法也是如此; 's' 的含义是将参数转换为字符串,但字符串中的 '%s' 标志必须与字符串后 % 符号后的参数数量完全相同。不用担心这个,但是如果您正在学习,请使用 .format()。

          【讨论】:

            猜你喜欢
            • 2016-08-11
            • 2013-07-06
            • 2017-03-12
            • 2015-12-11
            • 2013-12-01
            • 2011-08-12
            • 1970-01-01
            • 1970-01-01
            • 2020-09-03
            相关资源
            最近更新 更多