用于编写进入和退出脚本的Python脚本

用于编写进入和退出脚本的Python脚本,python,Python,我试图创建一个python脚本,点击一个按钮,打开另一个python脚本并关闭它自己,第二个脚本中的一些返回函数返回到原始脚本,希望您能提供帮助 谢谢。因为你的问题很模糊,这里有一个模糊的答案: 首先,想想你是否真的需要这么做。为什么第一个脚本不能将第二个脚本作为一个模块导入并调用一些函数 但是让我们假设您已经得到了一个很好的答案,并且您确实需要“关闭”并运行另一个脚本,其中“关闭”的意思是“使您的GUI不可见” 这将隐藏窗口,运行其他脚本,然后在其他脚本完成后再次显示窗口。一般来说,在事件处理

我试图创建一个python脚本,点击一个按钮,打开另一个python脚本并关闭它自己,第二个脚本中的一些返回函数返回到原始脚本,希望您能提供帮助


谢谢。

因为你的问题很模糊,这里有一个模糊的答案:

首先,想想你是否真的需要这么做。为什么第一个脚本不能将第二个脚本作为一个模块导入并调用一些函数

但是让我们假设您已经得到了一个很好的答案,并且您确实需要“关闭”并运行另一个脚本,其中“关闭”的意思是“使您的GUI不可见”

这将隐藏窗口,运行其他脚本,然后在其他脚本完成后再次显示窗口。一般来说,在事件处理程序中间做一些缓慢的和阻塞的操作是非常糟糕的,但是在这种情况下,因为我们隐藏了整个UI,所以你可以逃脱它。 一个更智能的解决方案将涉及第二个脚本发送的某种信号,或者观察线程发送的某种信号。例如:

def run_other_script_with_gui_hidden(window):
    gui_library.do_on_main_thread(window.hide)
    subprocess.call([sys.executable, '/path/to/other/script.py'])
    gui_library.do_on_main_thread(window.show)

def handle_button_click(button):
    t = threading.Thread(target=run_other_script_with_gui_hidden)
    t.daemon = True
    t.start()
显然,您必须用所选窗口库的适当代码替换诸如
按钮.窗口()
窗口.隐藏()
gui\u库.在主线程上执行等内容

如果您希望第一个脚本实际退出,第二个脚本重新启动它,您可以这样做,但这很棘手。您不希望将第二个脚本作为子进程启动,而是作为兄弟进程启动。理想情况下,您希望它接管您自己的流程。除非您的操作系统会自动关闭GUI(基本上,Windows会,Unix不会),否则您需要先关闭GUI。看看这个系列,但您确实需要了解这些东西在Unix中是如何工作的,才能正确地完成它。除非您希望这两个脚本紧密耦合在一起,否则您可能希望在命令行上向第二个脚本传递完全正确的参数以重新启动第一个脚本(基本上,在任何其他参数之后传递整个
sys.argv


或者,您可以使用在现有解释器实例中运行第二个脚本,然后让第二个脚本
execfile
返回。这与
exec
解决方案有类似但不完全相同的问题。

由于您的问题非常模糊,这里有一个模糊的答案:

首先,想想你是否真的需要这么做。为什么第一个脚本不能将第二个脚本作为一个模块导入并调用一些函数

但是让我们假设您已经得到了一个很好的答案,并且您确实需要“关闭”并运行另一个脚本,其中“关闭”的意思是“使您的GUI不可见”

这将隐藏窗口,运行其他脚本,然后在其他脚本完成后再次显示窗口。一般来说,在事件处理程序中间做一些缓慢的和阻塞的操作是非常糟糕的,但是在这种情况下,因为我们隐藏了整个UI,所以你可以逃脱它。 一个更智能的解决方案将涉及第二个脚本发送的某种信号,或者观察线程发送的某种信号。例如:

def run_other_script_with_gui_hidden(window):
    gui_library.do_on_main_thread(window.hide)
    subprocess.call([sys.executable, '/path/to/other/script.py'])
    gui_library.do_on_main_thread(window.show)

def handle_button_click(button):
    t = threading.Thread(target=run_other_script_with_gui_hidden)
    t.daemon = True
    t.start()
显然,您必须用所选窗口库的适当代码替换诸如
按钮.窗口()
窗口.隐藏()
gui\u库.在主线程上执行等内容

如果您希望第一个脚本实际退出,第二个脚本重新启动它,您可以这样做,但这很棘手。您不希望将第二个脚本作为子进程启动,而是作为兄弟进程启动。理想情况下,您希望它接管您自己的流程。除非您的操作系统会自动关闭GUI(基本上,Windows会,Unix不会),否则您需要先关闭GUI。看看这个系列,但您确实需要了解这些东西在Unix中是如何工作的,才能正确地完成它。除非您希望这两个脚本紧密耦合在一起,否则您可能希望在命令行上向第二个脚本传递完全正确的参数以重新启动第一个脚本(基本上,在任何其他参数之后传递整个
sys.argv


或者,您可以使用在现有解释器实例中运行第二个脚本,然后让第二个脚本
execfile
返回。这与
exec
解决方案有类似但不完全相同的问题。

您无法返回到已关闭的程序。那么,你的意思是第二个脚本完成后会从头开始重新启动第一个脚本吗?或者第一个脚本只是关闭它的窗口,但仍在运行?另外,您尝试使用哪个GUI库?您不能返回到已关闭的程序。那么,你的意思是第二个脚本完成后会从头开始重新启动第一个脚本吗?或者第一个脚本将关闭窗口但继续运行?另外,您尝试使用哪个GUI库?您好,非常感谢您的回复。这个想法是,主python脚本有一个不断增长的列表,或者到其他python脚本的路径。有点像菜单。例如,当用户单击第五个按钮python5.py时,将开始关闭main.py脚本。然后,当python5.py完成时,python5.py中的函数可能会关闭python5.py并打开main.py。这将是一个合适的解决方案,也许你能帮上忙。您关于隐藏窗口的第一个示例非常有趣,但问题是当您有许多需要打开和关闭的python脚本时如何。谢谢。你真的需要决定“结束”是什么意思,然后才能继续。脚本真的需要停止运行吗?还是关闭它的主窗口?还是把它藏起来?为什么它需要这些?自从上世纪80年代末Switcher或Multifinder出现以来,启动程序/菜单应用程序保持运行是很正常的;他们所有的GUI都在后台,所以这不是问题。一