0

私は Python 3 を使用しています。私はまだ学習中ですが、たとえば、他のプログラミング言語の中級者です。今のところ単純なことだけを行う単純な GUI を作成していますが、今後さらに追加する予定です。私はいくつかの成功を収めています。次に、外部スクリプトを実行する関数 (または Python で呼び出されるもの) をスクリプト フォルダーに保存するというアイデアがありました。だから私はこれを書いた...

def runscript(scriptname):
    from subprocess import call
    call(['scripts/'+scriptname])

その後、私のコードでこれを持っています...

sdb = Button(topbar, text="Shutdown", command= runscript("shutdown.sh"), font=("Helvetica", 20), width=18)

shutdown.sh は、期待どおりのことを実行する単純なスクリプトです。

これで、python3 MyScript.py を使用して python スクリプトを実行するたびに、マシンが即座にシャットダウンします! シャットダウンボタンをクリックしたときにのみシャットダウンしたいのは明らかです。私が読んだことから、それはPythonがすべての行を実行するという事実に関係していると思います。したがって、PC をシャットダウンする関数の例がインターネット上にたくさんあるのに、より一般的なスクリプト実行コードが役に立たない理由がわかりません。

4

1 に答える 1

3

コードを書くときrunscript("shutdown.sh")、それは何をすべきですか?

明らかに、答えは、runscript関数を呼び出して引数を渡す必要があるということ"shutdown.sh"です。

では、コードを書くとき、command=runscript("shutdown.sh")それは何をすべきでしょうか?

問題が見えますか?関数を実行し、runscriptその関数の結果をcommand属性に渡します。代わりに、command属性は呼び出し可能な関数への参照を取ります。明示的な引数を渡そうとしているので、それを達成する 1 つの方法はラムダを使用することです。

sdb = Button(..., command=lambda script="shutdown.sh": runscript(script))

ラムダよりもfunctools.partialを好む人もいます:

sdb = Button(..., command=functools.partial(runscript, "shutdown.sh"))
于 2013-07-29T20:35:34.387 に答える