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)
Aufruf versucht, den Code für das Notwendige zu verkleinern. Vollständiger Code unter https://github.com/elta13/cpdiag. Der obige Code, ich habe mir schon seit einiger Zeit den Kopf darüber geschlagen. Ich bin ziemlich neu bei Python und habe während dieses ersten Projekts gelernt.Python: Verwenden Sie lokale String-Variable, um die Remote-Funktion
Ich verwende Tkinter, um 3 Eingabefelder anzuzeigen, die arbeiten, um usrdef-Variablen zu erhalten. Dann benutze ich mehrere Tasten, jeder ruft eine Funktion aus einer anderen lokalen Datei cpdiag.py. Jetzt habe ich Funktion für jede remote-Funktion, die ich rufe mit der einzigen Sache, die die Zeile mit cpdiag ändert. "Testname". (Cpdaig.ssh "etc".)
Aktuelle Probleme: Wenn ich passiere auf der Schaltfläche runtest (diskTest), innerhalb runtuest druckt dies als "Funktion diskTest bei x0xxxxx" Und der Code stürzt damit mit dem Versuch, "cpdiag.testname" aufzurufen, die nicht in der anderen lokalen Datei cpdiag.py existiert.
Also dann habe ich herausgefunden, dass ich runtest ("diskTest") übergeben könnte, und es würde innerhalb von runtest() drucken. Aber runtest versucht immer noch "cpdiag.testname" von der anderen Datei aufzurufen. Ich erkenne an diesem Punkt, ich verstehe nicht, wie man etwas entfernt mit einer lokalen Variablen anruft.
Also habe ich versucht, runtest ("cpdiag.diskTest"), für die ich "'str' kann nicht aufgerufen werden" oder dergleichen.
Wie kann ich "testname" in runtest() übergeben, wobei "testname" eine in der anderen Datei cpdiag.py definierte Funktion ist?!?!?
Ich denke, ich habe die Top-Antwort wie 20 mal gelesen, ich glaube nicht, ich verstehe, was "bar" ist in dem Beispiel. –
bar ist der Name der Funktion von foo. In Ihrem Beispiel wird es "testresult = getattr (cpdiag, testname) (cpdiag.ssh (usrdef_sship, usrdef_username, usrdef_pass))' –
Ok, also erstmal, danke eine Million, es funktioniert! Ich verstehe noch nicht wie, aber bald! Vielen Dank für die Erklärung ein wenig weiter für mein Szenario! –