使用命令行参数调用类方法

时间:2018-06-30 06:46:41

标签: python-3.x function class methods arguments

很抱歉,我的用语全都错了;我仍在学习Python的基础知识。我一直无法通过Google搜索此问题,可能在很大程度上是因为我不知道该术语。

所以。我已经在.py脚本中建立了带有方法/功能的类的类。为了使此操作简单易行,我想从命令行参数调用它们。我不知道如何解释它,也找不到合适的例子,所以我将尝试演示它:

例如,将 mute_on 作为我要调用的函数。我在参数中使用函数/方法运行脚本,例如:

python3 ./myscript.py mute_on

我假设我们要导入sys(?),定义类和函数,并从该类创建相关对象:

import sys

class TelnetAVR(PioneerDevice):

    def mute_on(self, mute):
        self.telnet_command("MO")

mypioneer = PioneerDevice('Pioneer AVR', '192.168.2.89', 8102, 10) 

...最后,我希望命令行参数调用方法/函数-而不是像这样显式调用它:

mypioneer.mute_volume()

..我想使用arg( sys.argv [1] )动态调用该函数,例如:

mypioneer.{sys.argv[1]}()

任何想法,好心的人?我被自动引用为What is getattr() exactly and how do I use it?,但是我不知道这些信息如何在这里为我提供帮助。

我尝试设置 cmnd ='turn_off',然后以下操作失败...;

getattr(mypioneer, str(cmnd))
getattr(mypioneer, cmnd) 

谢谢!

1 个答案:

答案 0 :(得分:0)

这个答案似乎有点基础,但是我不能抱怨它的功效;

mypioneer = PioneerDevice('Pioneer AVR', '192.168.2.89', 8102, 10)     
exp = 'mypioneer.' + sys.argv[1] + '()'
print('Executing: ' + exp  )
exec(exp)

我放弃了寻求一个优美答案的选择,只是根据命令行参数构造了一个我想执行(exp)的字符串。效果很好。Home Assistant可以使用相同的脚本在我的Pioneer AVR上调用50个telnet控件。