Python osx下打开的子进程

Python osx下打开的子进程,python,macos,subprocess,Python,Macos,Subprocess,我的程序中有一行代码,用于启动程序的其他实例: a=subprocess.Popen(__file__) 在linux下,它可以正常工作 但是在osx下,它不会创建一个新窗口(该程序是一个Tkinter程序),但它不会给出任何错误。 (我检查了\u file\u实际上是正在运行的程序的正确名称,它是可执行的) 报税表如下: > pprint (vars(a)) {'_child_created': True, 'pid': 38865, 'returncode': None,

我的程序中有一行代码,用于启动程序的其他实例:

a=subprocess.Popen(__file__)
在linux下,它可以正常工作

但是在osx下,它不会创建一个新窗口(该程序是一个Tkinter程序),但它不会给出任何错误。 (我检查了\u file\u实际上是正在运行的程序的正确名称,它是可执行的)

报税表如下:

>    pprint (vars(a))
{'_child_created': True,
 'pid': 38865,
 'returncode': None,
 'stderr': None,
 'stdin': None,
 'stdout': None,
 'universal_newlines': False}

有什么提示吗?

你遇到了一个令人尴尬的问题。你知道吗?您的窗口只是隐藏在前面创建的另一个窗口后面

要查看此情况,请将最新创建的窗口显示在第一个窗口的前面,如中所示:

import Tkinter
import subprocess

if __name__ == "__main__":
    try:
        open('bluh_check')
    except IOError:
        open('bluh_check', 'w').close()
        x = subprocess.Popen(['python', __file__])
        print vars(x)
        title = 'there'
    else:
        title = 'hi'

    root = Tkinter.Tk()
    root.title(title)
    root.withdraw()
    root.deiconify()
    root.mainloop()

从相同的python可执行文件开始,并传递相同的命令行参数:
p=Popen([sys.executable]+sys.argv)
。更令人尴尬的是:如果没有参数调用我的程序,它会自动退出,而我只是向它提供了_文件。我发现最好的解决方案是将它简单地称为a=subprocess.Popen(sys.argv):第0个列表值是程序名,其余的都是它的命令行参数