我有一个python循环,该循环在每次迭代时都在新路径中创建新图像。我想将该路径发送到先前执行的进程中,该进程正在命令提示符下等待路径。
详细信息:
我在python中运行一个自动驾驶模拟器,每5帧我想将该当前帧(保存在RAM磁盘中)测试到我训练过的对象检测器算法中(花费大约9毫秒的时间来检测我的对象)但是2秒钟即可打开该过程)。实际上,我使用子流程模块执行训练有素的算法,但是我遇到的问题是,当打开该流程时(运行主脚本时,我只打开了该流程一次),它正在等待路径图像。我相信,有了您的技巧,我已经很接近答案了,但是我没有面对如何将路径图像传递到此子进程的过程,该子进程每5帧迭代等待一次。
PD:我使用的是Windows,Python 3.5.4
你知道我该怎么办吗?
答案 0 :(得分:1)
如果您在* nix环境中,并且我了解您想要的内容,则管道可以非常优雅地提供您想要的内容。我不知道Windows,但也许可以在其中使用相同的概念。
这是一个简单的例子,说明了这一点:
Pipe1a.py:
#!/usr/bin/env python
import time
import sys
for i in range(10):
time.sleep(1) # represent some processing delay
print("filename{}.jpg".format(i))
sys.stdout.flush()
Pipe1b.py:
#!/usr/bin/env python
import sys
while True:
line = sys.stdin.readline()
if len(line) == 0:
break
print "Processing image '{}'".format(line.strip())
如果使这两个脚本都可执行,则可以在命令提示符下通过管道将它们链接在一起:
> Pipe1a.py | Pipe1b.py
结果输出:
Processing image 'filename0.jpg'
Processing image 'filename1.jpg'
Processing image 'filename2.jpg'
Processing image 'filename3.jpg'
Processing image 'filename4.jpg'
Processing image 'filename5.jpg'
Processing image 'filename6.jpg'
Processing image 'filename7.jpg'
Processing image 'filename8.jpg'
Processing image 'filename9.jpg'
这里的概念是,一个进程将数据写入其stdout
,第二个进程从其stdin
读取数据。
如果您不想使用命令提示符将它们串在一起,而只想运行一个脚本,则可以使用Python subprocess1
用几乎相同的代码执行相同的操作模块。对于此示例,您可以让Pipe1b.py
程序通过Pipe1a.py
运行subprocess.Popen
程序,然后以相同的方式处理其输出。
答案 1 :(得分:0)
感谢您的所有评论和帮助。终于我实现了。
我使用库'pexpect',该库允许使用功能process = popen_spawn.PopenSpawn
在python脚本中启动程序。然后,该库中名为“发送”的函数允许将参数传递给正在运行的进程(process.send(arg)
)。
对于我来说,我在脚本的开头启动程序(.exe),将实例定义为全局变量。然后,我只需要在每次迭代时执行send
函数。