我有一个python循环,它在每次迭代时在新路径中创建一个新图像。我希望将该路径发送到之前执行的一个进程中,该进程正在等待命令提示符下的路径。
更详细地说:
我正在运行python中的自动驾驶模拟器,每隔5帧我就想将当前帧(保存在RAM磁盘中)测试到我训练过的对象检测器算法中(该算法花了大约9ms来检测我的对象,但2秒来打开这个过程)。实际上,我使用子进程模块执行经过训练的算法,但我遇到的问题是,当该进程打开时(我只打开进程一次,当我运行主脚本时),它正在等待路径图像。我相信,有了你的提示,我已经接近答案了,但我不需要面对如何将路径图像传递给这个在每5帧迭代中等待它的子过程。
PD:我使用的是Windows,Python 3.5.4
你知道我能做什么吗?
发布于 2019-06-30 20:27:05
感谢您的所有评论和帮助。我终于做到了。
我使用库'pexpect‘,它允许在python脚本中使用函数process = popen_spawn.PopenSpawn
启动程序。然后,该库中一个名为'send‘的函数允许将参数传递给正在运行的进程(process.send(arg)
)。
在我的例子中,我在脚本的开头启动程序(.exe),将该实例定义为一个全局变量。然后,我只需在每次迭代中执行send
函数。
发布于 2019-06-28 18:30:17
如果你在一个*nix环境中,并且我理解你想要什么,pipes提供了你想要做的事情。我不知道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
程序通过subprocess.Popen
运行Pipe1a.py
程序,然后以同样的方式处理其输出。
https://stackoverflow.com/questions/56810924
复制相似问题