【问题标题】:subprocess open under osxosx下子进程打开
【发布时间】:2013-01-04 00:22:43
【问题描述】:

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

a=subprocess.Popen(__file__)

在 linux 下运行正常。

但是在 osx 下,它并没有像它应该的那样创建一个新窗口(该程序是一个 Tkinter 程序),但它根本没有给出任何错误。 (我检查了 _file_ 实际上是正在运行的程序的正确名称,它是可执行的)

返回是这样的:

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

有什么提示吗?

【问题讨论】:

  • 从相同的 python 可执行文件开始并传递相同的命令行参数:p = Popen([sys.executable] + sys.argv)

标签: python macos subprocess


【解决方案1】:

你有一个尴尬的问题。你知道吗 ?您的窗口只是隐藏在之前创建的另一个窗口后面。

要看到这一点,请将最新创建的窗口显示在第一个窗口的前面,如下所示:

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()

【讨论】:

  • 更尴尬的是:如果在没有参数的情况下调用我的 prog,我的 prog 会静默退出,而我只是向它提供了 _file_。我发现最好的解决方案是将其简单地称为 a=subprocess.Popen(sys.argv):第 0 个列表值是程序名称,其余的都是命令行参数
猜你喜欢
  • 2013-11-10
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2012-09-24
  • 2015-08-30
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多