【问题标题】:Non blocking subprocess.call - revisited [duplicate]非阻塞 subprocess.call - 重新访问 [重复]
【发布时间】:2016-01-04 00:57:33
【问题描述】:

我发现这个帖子已经超过 2 年了。我想问一个新问题,以便获得更多关注

Non blocking subprocess.call

我的问题:

我的情况与@DavidJB 在之前的一篇文章中描述的一样

谢谢,这似乎有效,但是当我在 slave.py 中包含一个 While 循环时,它似乎被卡住并且没有在循环中执行任何操作(即使使用 timer.sleep() 函数..? – DavidJB Apr 17 ' 13 点 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()
...

主要是,我想从 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 秒一次,除非某些事件将其从无限循环中中断

【问题讨论】:

  • 调用 subprocess.Popen 会创建一个新进程,就像您从 shell 运行 python slave.py 一样。因此,除非您使用例如,否则孩子和父母之间不会有直接联系。标准输入=管道。 AFAIK 没有其他东西可以阻止孩子。
  • 评论是假的。 while 循环本身不会挂起子进程(它是一个单独的进程)。你能create a minimal code example that would demonstrate the issue吗?描述您预计会发生什么以及会发生什么(逐步)。
  • 我已根据您的要求编辑了问题。 @J.F.塞巴斯蒂安
  • 有什么问题?发生了什么,而您希望发生什么? (准确)
  • 我希望主进程产生子进程并继续执行。从那时起,我希望孩子继续独立执行。目前,主要等到孩子做出某种反应(通过 break 语句)。我不希望主要等待孩子返回任何东西。它所要做的就是产生它并继续。如果孩子没有“while True”,它会按预期工作。

标签: python subprocess nonblocking


【解决方案1】:

如果你去执行其他 python 脚本,那么试试这个

main.py

 import subprocess

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

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

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2022-10-09
    相关资源
    最近更新 更多