import tkinter as tk
import subprocess
import sys

def start_newFile():
    subprocess.call((sys.executable, 'testing2.py'))
    sys.exit()

root = tk.Tk()
root.title("First Script")

# Button to start a new file
start_button = tk.Button(root, text="Start New File", command=start_newFile)
start_button.pack()

root.mainloop()

我是一名CS新手学生,我有这个简单的代码,我正在为一个更大的大学项目的一小部分创建,但我遇到了一些问题.项目需求之一需要我演示如何打开第二个Python文件并关闭第一个Python文件.根据我所了解的情况,有三种方法可以打开第二个Python文件:subProcess. call()subProcess. run()和subProcess.Popen()

我只是简单地将调用()更改为run()或Popen()来摆弄这个调用,我发现Popen()函数是唯一有效的函数,允许sys.exit()实际关闭它.call()和run()打开第二个文件,但第一个文件仍然在那里,并且没有关闭.在我看来,天气看起来很冷.

为什么会这样?

推荐答案

subProcess.Popen()确实为您提供了更多灵活性,与subProcess. call()或subProcess. run()相比.当您使用Popen()时,它会产生一个新进程,允许您的主脚本继续运行,而无需等待子进程完成.当您使用call()或run()时,主脚本会等待子进程完成执行,然后再继续.在您的情况下,在子流程完成之前不会调用sys.exit().这可能会导致您的主脚本看起来冻结,因为它正在等待子进程完成,但它从来不会这样做,因为它正在等待主脚本退出.

import all necessary libraries
def function_name:
    subprocess.Popen([sys.executable, 'testing2.py'])
    root.destroy()  # Close the Tkinter window immediately

root = tk.Tk()
root.title("First Script")

start_button = tk.Button(root, text="Start New File", command=start_new_file)
start_button.pack()

root.mainloop()

这是修改后的版本,您可以try 一下.

Python相关问答推荐

带条件计算最小值

如何根据参数推断对象的返回类型?

Python中的嵌套Ruby哈希

scikit-learn导入无法导入名称METRIC_MAPPING64'

大小为M的第N位_计数(或人口计数)的公式

加速Python循环

如何在Python中并行化以下搜索?

使用NeuralProphet绘制置信区间时出错

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

未知依赖项pin—1阻止conda安装""

如何指定列数据类型

在输入行运行时停止代码

OpenCV轮廓.很难找到给定图像的所需轮廓

巨 Python :逆向猜谜游戏

按条件添加小计列

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

如何在Polars中将列表中的新列添加到现有的数据帧中?

在使用ROLING()获得最大值时,是否可以排除每个窗口中的前n个值?

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

按最大属性值Django对对象进行排序