Возник новый процесс неблокирования с использованием Python в Mac OS X - PullRequest
4 голосов
/ 22 июня 2011

Я нашел несколько статей и даже сложил | переполнение вопросов, касающихся этой темы, но я все еще не могу это сделать ..

Что я хочу сделать, это открыть экземпляр firefoxиз питона.тогда приложение python должно продолжать заниматься своим делом и игнорировать процесс firefox.

Я смог достичь этой цели в Windows-7 и XP, используя:

subprocess.Popen()

В OS X я пробовал:

subprocess.Popen(['/Applications/Firefox.app/Contents/MacOS/firefox-bin'])
subprocess.call(['/Applications/Firefox.app/Contents/MacOS/firefox-bin'])
subprocess.call(['/Applications/Firefox.app/Contents/MacOS/firefox-bin'], shell=True)
os.system('/Applications/Firefox.app/Contents/MacOS/firefox-bin') 

(и, возможно, некоторые другие, которые я забыл) безрезультатно.Мое приложение на python зависает, пока я не закрываю приложение firefox.

Что мне здесь не хватает?какие-нибудь подсказки?

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Чтобы показать, что я имел в виду:

import os
if not os.fork():
    os.system('firefox')
os._exit(0)

Версия, которая не выходит из основного процесса Python:

import os
if not os.fork():
    os.system('firefox')
    os._exit(0)
2 голосов
/ 22 июня 2011

Вам нужно как-то отсоединить процесс. Я вырвал это из процесса порождения из Python

import os
pid = os.fork()
if 0 == pid:
  os.system('firefox')
  os._exit(0)
else:
  os._exit(0)

Это порождает раздвоенную версию того же скрипта без головы, которая затем может выполнить все, что вам нравится, и сразу же выйти из нее.

...