1

示例 Python 父文件:

class myClass( wx.Frame ):
    def __init__(self):
        print "Prepare execute"
        self.MyThread = Thread.RunBackground( './child.py' , ( '--username' , 'root' ) );
        print "Executing... Do you like this app?"
        self.MyThread.start();
    def onClose( self , evt ):
        self.MyThread.close()
        self.exit();

app = MyClass()

我需要知道如何使用 Python 在后台运行脚本。这个想法是可以使用主窗口,即使第二个过程有效。

4

1 回答 1

3

我在这里猜测一下:您根本不关心线程,您只想“运行脚本”作为“第二个进程”。

这很容易。运行脚本就像运行其他任何东西一样;您使用该subprocess模块。由于脚本在一个完全独立的 Python 解释器实例中运行,在一个完全独立的进程中,“可以使用主窗口,即使第二个进程工作”——或者即使它只是永远旋转或阻塞。

例如:

class myClass( wx.Frame ):
    def __init__(self):
        print "Executing... Do you like this app?"
        self.child = subprocess.Popen([sys.executable, './child.py', '--username', 'root'])
    def onClose( self , evt ):
        self.child.wait()
        self.exit();

这里唯一的技巧是传递什么作为第一个参数。如果要确保child.py由与父级相同的 Python 副本运行,请使用sys.executable. 如果要确保它由默认 Python 运行,即使父级使用不同的 Python,请使用python. 如果要使用特定路径,请使用绝对路径。如果你想让 shell(或者,在 Windows 上,pylauncher 的东西)根据该#!行计算出来,请使用并作为第一个参数shell=True传递。./child.py等等。

于 2013-05-09T22:51:24.210 回答