【问题标题】:How to pass the inputs of the argparser args to arguments to another function?如何将 argparser args 的输入传递给另一个函数的参数?
【发布时间】:2014-07-13 16:16:15
【问题描述】:

我正在编写一个程序,它基本上登录到远程服务器(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()

我在这里要做的是,我有一个连接到远程服务器的功能,并在main() 功能中使用argparse 获取输入。我需要将这些输入参数传递给do_connect 函数。我怎样才能做到这一点?

【问题讨论】:

  • self 上的参数 do_connect() 在这里看起来不合适;它不是一种方法,您根本没有使用该参数。

标签: python function main argparse paramiko


【解决方案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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2020-10-03
    相关资源
    最近更新 更多