我正在使用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执行每一行的事实。所以我不明白为什么互联网上有很多关于关闭你电脑的功能的例子,而我更常用的脚本运行代码却没有任何有用的方法。
答案 0 :(得分:3)
当您编写代码runscript("shutdown.sh")
时,它应该做什么?
显然,答案是它应该调用runscript
函数并将参数"shutdown.sh"
传递给它。
那么,当你编写代码command=runscript("shutdown.sh")
时,它该怎么办?
你看到了问题吗?您正在执行runscript
函数,并将该函数的结果传递给command
属性。相反,command
属性将引用带到可调用函数。由于您尝试传入一个显式参数,因此使用lambda来实现这一点的一种方法是:
sdb = Button(..., command=lambda script="shutdown.sh": runscript(script))
有些人比lambda更喜欢functools.partial:
sdb = Button(..., command=functools.partial(runscript, "shutdown.sh"))