再次运行Python脚本

3
假设我有以下示例代码:
import wx

app = wx.App(False)  # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
s=wx.Button(frame,-1,"New")
frame.Show(True)     # Show the frame.
app.MainLoop()

有些程序中,如果你点击“新建”按钮,它会在另一个窗口中再次打开该程序。我想知道,我怎么在Python中实现这个功能?

我不能简单地创建一个窗口对象,然后复制它,因为在我的实际程序中,我使用全局变量,而这些全局变量仅适用于一个窗口。

看起来我的唯一选择是找到一种重新运行程序的方法。

1个回答

5
您可以尝试这样做:
import subprocess
import sys
new_process = subprocess.Popen([sys.executable]+sys.argv)

这将再次使用最初运行Python时使用的参数运行Python。或者修改您最初的示例,使按下按钮再次运行脚本:-

import wx
import subprocess
import sys

def re_run(e):
    new_process = subprocess.Popen([sys.executable]+sys.argv)

app = wx.App(False)  # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
s=wx.Button(frame,-1,"New")
s.Bind(wx.EVT_BUTTON, re_run)
frame.Show(True)     # Show the frame.
app.MainLoop()

实际上,当我尝试您的示例时,单击按钮时似乎没有任何反应。 - user1357159
哦,我正在运行Vista系统,但是我看不到任何事情发生。 - user1357159
我已经让它工作了,不是什么大问题。另外,如果我使用py2exe将我的程序转换为.exe文件,这种方法是否仍然有效? - user1357159
Py2exe:它可能会做到 - 你必须试一试! - Nick Craig-Wood
啊,这台电脑真是太奇怪了,我尝试使用py2exe,但最终导致电脑崩溃了,虽然我猜可能是这个原因。 - user1357159

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接