在python中使用exec(open(file).read())运行杀死程序



在我的代码中,我从tkinter gui调用管道。当用户按下"运行"按钮时,整个管道开始运行。如果选择了某些设置,则会调用主 GUI 的顶层,要求输入附加文件。除了按下取消按钮或关闭窗口 X 之外,这一切都有效。顶层关闭,但程序继续运行。最终它会崩溃,因为文件不存在。调用 sys.exit(( 不是解决方案,因为这样整个 GUI 就会关闭,我只希望特定的顶层关闭并停止正在运行的文件。

如何在不杀死整个程序的情况下杀死使用 exec(open(file(.read((( 运行的文件?

老实说,你可能根本不应该使用exec,但假设你这样做了,exec仍然在与主程序相同的进程和线程中运行,如果不杀死主程序,就无法退出它。

您应该在另一个进程、子进程或线程中打开它。由于您的exec似乎正在运行python代码,因此您可以简单地使用:

from subprocess import Popen
p = Popen(['python', filename'])

然后它在后台运行,您的正常过程继续,您可以随时使用 .

p.kill()

如果您想为该过程输入或读出其输出,它会变得比这更复杂,但这是一个不同的问题。你可以从这里开始查看如何读取输出:存储子进程的输出。字符串中的 Popen 调用

获取输出的一个小示例如下所示:

from subprocess import Popen, PIPE
p = Popen(['python', filename], stdout=PIPE, stderr=PIPE)
output, errors = p.communicate()

但是,这将等到进程完成运行,因此可以从另一个线程开始所有这些操作,或者找到另一种方法来获取输出(可能是日志文件(

请注意,我在Popen中只使用了'python',如果python可执行文件不在您的路径中或具有不同的名称,则应将其替换为可执行文件的完整路径

相关内容