我正在编写一个程序,它基本上登录到远程服务器(Linux)并执行一些命令。为此,我需要得到像"服务器IP","用户名"和"密码"等输入。从命令行。我正在使用argparse
模块。我的代码看起来像这样:
import sys
import argparse
import getpass
import re
from time import gmtime, strftime
import paramiko
try:
import interactive
except ImportError:
from . import interactive
def do_connect(esxi):
"""Connect to host in the esxi host"""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='DEV Installer App')
parser.add_argument("--esxiIP", help="Mention the Esxi Host IP", required=True)
parser.add_argument("--userName", help="Enter the UserName of the Host", required=True)
parser.add_argument("--password", help="Enter the Password", required=True)
args = parser.parse_args()
我在这里尝试做的是,我有一个连接到远程服务器的功能,并使用argparse
函数中的main()
获取输入。我需要将这些输入参数传递给do_connect
函数。我怎么能做到这一点?
答案 0 :(得分:1)
args
是一个Namespace
实例对象,其中包含每个命令行参数的属性。参数基于选项开关,除非您明确地给它一个不同的名称。
在这种情况下,您将拥有args.esxiIP
,args.userName
和args.password
属性,然后您可以将这些属性传递给另一个函数。如果您的函数仅使用esxiIP
参数,请将其传递给:
do_connect(args.esxiIP)
如果需要更多参数,请明确传递这些参数。
演示:
>>> args = parser.parse_args('--esxiIP 10.20.30.40 --userName foo --password bar'.split())
>>> args
Namespace(esxiIP='10.20.30.40', password='bar', userName='foo')
>>> args.esxiIP
'10.20.30.40'
>>> args.userName
'foo'
>>> args.password
'bar'