Отговарям на собствения си въпрос: В крайна сметка просто използвах os.system
с &
в края на командата, както беше предложено от @kevinsa. Това позволява родителският процес да бъде прекратен, без дъщерният процес да бъде прекратен.
Ето малко код:
child.py
#!/usr/bin/python
import time
print "Child started"
time.sleep(10)
print "Child finished"
parent.py, използвайки subprocess.Popen:
#!/usr/bin/python
import subprocess
import time
print "Parent started"
subprocess.Popen("./child.py")
print "(child started, sleeping)"
time.sleep(5)
print "Parent finished"
Изход:
$ ./parent.py
Parent started
(child started, sleeping)
Child started
^CTraceback (most recent call last):
Traceback (most recent call last):
File "./child.py", line 5, in <module>
File "./parent.py", line 13, in <module>
time.sleep(10)
time.sleep(5)
KeyboardInterrupt
KeyboardInterrupt
- забележете как детето никога не завършва, ако родителят бъде прекъснат с Ctrl-C
parent.py, използвайки os.system и &
#!/usr/bin/python
import os
import time
print "Parent started"
os.system("./child.py &")
print "(child started, sleeping)"
time.sleep(5)
print "Parent finished"
Изход:
$ ./parent.py
Parent started
(child started, sleeping)
Child started
^CTraceback (most recent call last):
File "./parent.py", line 12, in <module>
time.sleep(5)
KeyboardInterrupt
$ Child finished
Забележете как детето живее отвъд Ctrl-C.
person
Sergey
schedule
10.06.2014
subprocess
и по-специалноsubprocess.Popen(...).pid
- person sberry   schedule 30.07.2013subprocess.Popen("./child.py")
прави точно това, от което се нуждая, въпреки че изобщо не е ясно от документите. Ако добавите коментара си като отговор, ще се радвам да го приема, благодаря. - person Sergey   schedule 30.07.2013&
в края на командата на обвивката и тя също ще работи. - person kevinsa5   schedule 30.07.2013