Python:使用本地字符串变量来调用远程函数

时间:2017-03-21 12:46:23

标签: python

    def runtest(testname):
        usrdef_sship = sship_e.get()
        usrdef_username = username_e.get()
        usrdef_pass = pass_e.get()
        testresult = cpdiag.testname(cpdiag.ssh(usrdef_sship, usrdef_username, usrdef_pass))
        messagebox.showinfo( "Results", testresult)

    #Button for disk Test
    disktest = Button(top, text="Disk Test", command = lambda: runtest("diskTest")
    disktest.grid(row=3,column=0, sticky=W)
    #Button for cpwd Test
    cpwdtest = Button(top, text="CPWD Test", command = lambda: runtest("cpwdTest")
    cpwdtest.grid(row=4,column=0, sticky=W)

试图缩小必要的代码。完整代码https://github.com/elta13/cpdiag。上面的代码,我已经敲了一段时间。我是python的新手,并且在我的第一个项目期间一直在学习。

我正在使用Tkinter显示3个输入字段,这些字段用于获取usrdef变量。然后我使用了几个按钮,每个按钮都会从另一个本地文件cpdiag.py中调用一个函数。现在,我一直在为我调用的每个远程函数重写函数,唯一改变的就是cpdiag。“testname”。(cpdaig.ssh“etc”。)

目前的问题: 如果我传递按钮运行测试(diskTest),在runtuest内部打印为“xTxxxxx处的函数diskTest”并且代码崩溃,试图调用“cpdiag.testname”,这在另一个本地文件cpdiag.py中不存在。

然后我发现我可以通过runtest(“diskTest”),它会在runtest()内打印。但是runtest仍然试图从另一个文件调用“cpdiag.testname”。我现在意识到,我不明白如何使用局部变量远程调用某些东西。

然后我尝试通过runtest(“cpdiag.diskTest”),我发生了“'str'无法调用”或类似情况。

如何将“testname”传递给runtest(),其中“testname”是在其他文件cpdiag.py中定义的函数?!?!?

1 个答案:

答案 0 :(得分:0)

您可以使用getattr builtin获取要在对象cpdiag上调用的方法实例,然后调用该方法。如下所示:

your_function = getattr(cpdiag, testname) # Get the method first
#  Now invoke
your_function(cpdiag.ssh(usrdef_sship, usrdef_username, usrdef_pass))