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には新しく、この間、必要に応じて最初のプロジェクトを学んでいます。Python:ローカル文字列変数を使用してリモート関数を呼び出す
私はTkinterを使用して、usrdef変数を取得するための3つの入力フィールドを表示しています。それから私はいくつかのボタンを使用しています、それぞれは別のローカルファイルcpdiag.pyから関数を呼び出します。今、私はcpdiagの行である唯一のものを呼び出すリモート関数ごとに関数を書き直しています。 "testname"(cpdaig.ssh "etc")
現在の問題: runtuestのボタンruntest(diskTest)で、これは "function diskTest at x0xxxxx"と表示されます。コードは、他のローカルファイルcpdiag.pyに存在しない "cpdiag.testname"を呼び出そうとするとクラッシュします。
それで、私はruntest( "diskTest")を渡すことができ、runtest()の内部に印刷することが分かりました。しかし、runtestはまだ他のファイルから "cpdiag.testname"を呼び出そうとします。現時点では、私はローカル変数を使ってリモートから何かを呼び出す方法を理解していません。
だから私はruntest( "cpdiag.diskTest")を渡そうとしましたが、 "str 'は呼び出すことができませんでした。
runtest()に "testname"を渡すにはどうしたらいいですか? "testname"は他のファイルcpdiag.pyで定義されている関数です。
私は20回もそのようなトップの答えを読んだと思いますが、私はこの例では「バー」が何であるかを理解していないと思います。 –
barはfooの関数名です。あなたの例では、 'testresult = getattr(cpdiag、testname)(cpdiag.ssh(usrdef_sship、usrdef_username、usrdef_pass))' –
になります。私はどのようにまだ理解できませんが、すぐに十分です!私のシナリオを少し説明してくれてありがとう! –