2015-10-06 69 views
0

我发现这个线程已超过2岁。我想问一个新的问题,所以我可以得到更多的关注无阻塞subprocess.call - 重访

Non blocking subprocess.call

我的问题:

我也有同样的情况@DavidJB,因为他在他的评论一个描述了早期的岗位

感谢,这似乎工作,但是当我在slave.py中包含一个While循环似乎卡住,并没有执行任何东西在循环(即使有一个timer.sleep()函数..? - DavidJB四月17 '13 at 23:59

任何人有任何更新?

我希望有一个while循环的子节点(slave.py)继续运行,父节点(main.py)不要等待子节点结束。家长应该继续工作。

这是我的主要和孩子的样子。

main.py

... 
proc = Popen('child.py', stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True) 
out, err = proc.communicate() 
... 

在主,我想spwan关闭child.py,然后去做其他的东西产卵它关闭

child.py

while True: 
    file = open('/mnt/flash/child.txt', 'aw') 
    file.write(datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "\t\topened the file now!!\thi\n" ) 
    time.sleep(5) 
    ... 
    <break> 
file.close() 

后孩子一旦开始写入文件,当前时间每5秒钟除非某些事件将其从无限循环中分离出来

+0

调用subprocess.Popen创建就像如果你运行'在shell蟒蛇slave.py'一个新的进程。所以除非你使用eg,否则孩子和父母之间不会有直接的联系。标准输入=管道。 AFAIK没有任何东西可以阻止孩子。 – cg909

+0

评论是伪造的。 while循环本身不会挂起子进程(这是一个单独的进程)。你可以[创建一个最小的代码示例来演示这个问题](http://stackoverflow.com/help/mcve)?描述你期望发生什么以及发生什么(逐步)。 – jfs

+0

我已根据您的要求编辑了该问题。 @ J.F。塞巴斯蒂安 –

回答

-2

如果你去执行其他的Python脚本,以便尝试这种

main.py 

import subprocess 

for insert, (list) in enumerate(list, start=1): 

l = [list] 
    subprocess.call(["python", "slave.py", '%s' % l])