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

Python:使用本地字符串变量调用远程函数,python,Python,试图压缩代码以获取必要的内容。完整代码在。上面的代码,我已经在上面敲了一段时间了。我是python新手,在我的第一个项目中,我一直在根据需要学习python 我使用Tkinter来显示3个输入字段,它们用于获取usrdef变量。然后我使用几个按钮,每个按钮都将从另一个本地文件cpdiag.py调用一个函数。现在,我一直在为我调用的每个远程函数重写函数,唯一改变的是cpdiag.testname(cpdaig.ssh“etc”)行 当前的问题: 如果我传递runtest(diskTest)按钮,在

试图压缩代码以获取必要的内容。完整代码在。上面的代码,我已经在上面敲了一段时间了。我是python新手,在我的第一个项目中,我一直在根据需要学习python

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

当前的问题: 如果我传递runtest(diskTest)按钮,在runtuest内部,它将打印为“x0xxxxx处的函数diskTest”,并且代码在试图调用“cpdiag.testname”时崩溃,该文件在另一个本地文件cpdiag.py中不存在

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

然后我尝试通过runtest(“cpdiag.diskTest”),为此我产生了“'str'不能被调用”之类的问题


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

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

    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)

我想我已经在上面的答案上读了20遍了,我想我不理解示例中的“bar”是什么。bar是foo函数的名称。在您的示例中,它将是
testresult=getattr(cpdiag,testname)(cpdiag.ssh(usrdef\u sship,usrdef\u username,usrdef\u pass))
好的,首先,感谢它的工作!我还不明白怎么回事,但是,很快!非常感谢您对我的场景做进一步的解释!getattr函数帮助您使用方法的名称从cpdiag库中获取方法作为可调用函数。然后像往常一样调用它。
your_function = getattr(cpdiag, testname) # Get the method first
#  Now invoke
your_function(cpdiag.ssh(usrdef_sship, usrdef_username, usrdef_pass))