gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:34:31 27 4
gpt4 key购买 nike

我已经阅读了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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com