python - Argparse 将命令行字符串传递给变量 python3

标签 python python-3.x list argparse

我已经阅读了argparse docs我正在尝试制作一个接受命令行参数并将这些值传递给变量的程序,如下所示:

ssh.py -username admin -password password -hostlist 192.168.1.1, 192.168.1.2 -commands uname -a, whoami 

当我在我的程序中静态分配这些值时,它可以工作,但是我无法让 argpase 将字符串传递给变量,无论目标是列表还是单个字符串。

这个有效:

hostlist = ['192.168.1.1','192.168.1.2']
username = 'admin'
password = 'password'
commands = ['uname -a','whoami']

这会静默运行,不会产生错误或写入日志文件:

    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '-username', help='The Username for authentication.')
    parser.add_argument('-p', '-password', help='The password for authentication.')
    parser.add_argument('-l', '-hostlist', nargs='+', help='List of devices to interact with.')
    parser.add_argument('-c', '-commands', nargs='+', help='An exact list of commands to run')

    args = parser.parse_args()
    u,username = args.username
    p,password = args.password
    l,hostlist = args.hostlist
    c,commands = args.commands

最佳答案

此代码以及您使用它的方式存在一些问题。

  1. 长选项应该用两个连字符指定:

    parser.add_argument('-u', '--username', help='The Username for authentication.')
    
  2. 每个选项仅在 args 中填充一个值,因此您不应尝试解包两个。试试这个:

    username = args.username
    
  3. 值在命令行上由空格而不是逗号分隔,因此请使用:

    --hostlist 192.168.1.1 192.168.1.2
    
  4. 命令行中包含空格的值将按空格拆分并解释为单独的值(“单词”)。要强制将它们解释为单独的词,请将它们括在引号中:

    --commands 'uname -a' 'whoami'
    

    或者,您可以使用反斜杠转义空格:

    --commands uname\ -a whoami
    

关于python - Argparse 将命令行字符串传递给变量 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786670/

相关文章:

python - 如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

python - 导入 scipy 错误 : cannot import name '_ccallback_c'

python - 使用布局将 Jinja2 模板渲染为字符串

python - 有没有办法检查 Python 元组中是否存在某个项目?

java - 如何将运行时已知的值 ('how many' 传递给 SQL 查询

python - 在 python 中编码/解码字符串

Python - 根据前者的键值将字典的键作为另一个字典的键值附加

python - 如何在 Python/OpenCV 中将图像分割成干净的段落?

python-3.x - 我如何在Python中使用pandas datetools,因为它从新版本中删除了

python - 空列表、元组、字典如何分配内存?