2014-05-24 146 views
0

我正在编写一个基本上登录到远程服务器(Linux)并执行少量命令的程序。为此,我需要从命令行获取“服务器IP”,“用户名”和“密码”等输入。我正在使用​​模块。我的代码看起来是这样的:如何将argparser参数的输入传递给另一个函数的参数?

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()功能使用​​的输入功能。我需要将这些输入参数传递给do_connect函数。我怎样才能做到这一点?

+0

上'do_connect的'self'参数()'看起来不合适在这里;它不是一种方法,你根本不使用参数。 –

回答

1

args是一个Namespace实例对象,其中包含每个命令行参数的属性。参数是基于选项开关的,除非你明确地给它一个不同的名字。

在这种情况下,您将拥有args.esxiIPargs.userNameargs.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' 
相关问题