我正在编写一个程序,它基本上登录到远程服务器(Linux)并执行一些命令。为此,我需要从命令行获得"服务器IP","用户名"one_answers"密码"等输入。我使用的是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()
我在这里要做的是,我有一个连接到远程服务器的功能,并且在main()
函数中使用argparse
获得输入。我需要将这些输入参数传递给do_connect
函数。我怎样才能做到这一点呢?
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'