我在文件 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/