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 执行每一行的事实有关。所以我不明白为什么互联网上有很多关于关闭你的电脑的功能的例子,而我的更通用的脚本运行代码没有以任何有用的方式工作。

4

1 回答 1

3

当你写代码runscript("shutdown.sh")时,它应该做什么?

显然,答案是它应该调用runscript函数并将参数传递给它"shutdown.sh"

那么,当你编写代码时command=runscript("shutdown.sh"),它应该做什么呢?

你看到问题了吗?您正在执行该runscript函数,并将该函数的结果传递给该command属性。相反,该command属性采用对可调用函数的引用。由于您正在尝试传入一个显式参数,因此使用 lambda 实现这一目标的一种方法:

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

有些人更喜欢functools.partial而不是 lambda:

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