我不想让它运行关闭代码的python解释器

时间:2013-07-29 20:29:54

标签: python-3.x tkinter subprocess

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

1 个答案:

答案 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"))