python - 如何从交互式解释器调用函数并为 argparse 传递参数?

标签 python arguments command line argparse

我在文件 test.py 中定义了一个 Python 函数 myFunc。我想在交互模式下从 Python 解释器测试这个函数,并将命令行参数传递给 argparse 进行解析。在 Python 解释器中,我输入 from test import myFunc。然后我希望能够在交互模式下运行“myFunc”...但是向它传递几个命令行参数。

例如,我已经尝试过 myFunc() arg1 arg2 但是 Python 解释器报告 SyntaxError: invalid syntax。

如果我简单地键入 myFunc(),该函数会运行,但当然不会传递任何参数。

我意识到我可以在我的代码中包含以下内容......

if __name__ == "__main__":
    myFunc()

然后我可以从命令行“python test.py arg1 arg2”运行 这确实有效。

不过,我想知道是否可以在交互模式下从 Python 解释器测试 myFunc() 函数,并将命令行参数传递给 argparse 进行解析。

import argparse
from textwrap import dedent
import sys

def myFunc():
    print "hello!"
    print str(sys.argv)

    parser = argparse.ArgumentParser(prog='Prog',
                                     formatter_class= argparse.RawTextHelpFormatter,
                                     description = dedent('Program to control Tycon TDDin2 Relay states'))
    parser.add_argument('addr',
                        help='ip[:port] address of target device. ' \
                        'Port defaults to the snmp port of 161.')
    parser.add_argument('relay',type=str, help='name of relay')
    parser.add_argument('action', type=str, help='action = Open, Close or Cycle')
    args = parser.parse_args()

    print('args = ' + args.addr + ' ' + args.relay + ' ' + args.action)

最佳答案

parse_args 获取要解析的字符串列表;此参数的默认值为 sys.argv[1:](好吧,实际上是 None,这将被解释为请求使用 sys.argv[ 1:]).将相同的参数添加到 myFunc,以直接传递给 parse_args

def myFunc(cli_args=None):
    ...

    args = parser.parse_args(cli_args)
    print('args = ' + args.addr + ' ' + args.relay + ' ' + args.action)

现在您可以使用您想要的任何参数列表调用 myFunc:

myFunc(["192.0.2.24", "foo", "Open"])

请记住,如果无法成功解析 args 列表(而不是仅仅引发自定义异常),parse_args 会有效地退出解释器,因此您需要准备好捕获SystemExit 异常。

关于python - 如何从交互式解释器调用函数并为 argparse 传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543747/

相关文章:

javascript - 作为参数传递时,对象变成数字

python - 返回多个对象并将它们用作参数

node.js - `npm i`命令有什么作用?

python - 使用 argparse 隐藏选定的子命令

python - 从Python脚本运行FreeCAD模块drawing_dimensioning或TechDrawGui

python - 根据输入设置变量值,StringProperty kivy

command - 如何在atom启动时运行命令

python - 属性错误 : module 'cv2' has no attribute 'imread'

c# - 参数超出范围异常

python - 用 Python 实现的可移植命令执行语法