我已经阅读了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
最佳答案
此代码以及您使用它的方式存在一些问题。
长选项应该用两个连字符指定:
parser.add_argument('-u', '--username', help='The Username for authentication.')
每个选项仅在
args
中填充一个值,因此您不应尝试解包两个。试试这个:username = args.username
值在命令行上由空格而不是逗号分隔,因此请使用:
--hostlist 192.168.1.1 192.168.1.2
命令行中包含空格的值将按空格拆分并解释为单独的值(“单词”)。要强制将它们解释为单独的词,请将它们括在引号中:
--commands 'uname -a' 'whoami'
或者,您可以使用反斜杠转义空格:
--commands uname\ -a whoami
关于python - Argparse 将命令行字符串传递给变量 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786670/