python调用perl_从Python调用Perl脚本不断返回值

我在这个网站上发现了一个问题,告诉我如何从Python调用Perl脚本.我目前正在使用以下代码行来实现这个目的:

pipe = subprocess.Popen(["perl", "./Perl_Script.pl", param], stdout=subprocess.PIPE)

result = pipe.stdout.read()

这很好用,但唯一的问题是Perl脚本需要几分钟才能运行.在Perl脚本的末尾,我使用一个简单的print语句来打印我需要返回Python的值,它将被设置为Python中的结果变量.

有没有办法可以每隔几秒在我的Perl脚本中包含更多的print语句,这些语句可以连续返回到Python(而不是等待几分钟并在最后返回一个长列表)?

最终,我正在做的是使用Perl脚本获取数据点,然后我将其发送回Python以绘制眼图.在Perl脚本运行完毕后,我不想等待几分钟来绘制眼图,而是希望将数据段连续地返回到Python,允许我的绘图每隔几秒更新一次.

解决方法:

您需要两个部分:在Python空间中一次读取一行并从Perl一次发出一行.第一个可以用循环来完成

while True:

result = pipe.stdout.readline()

if not result:

break

# do something with result

readline阻塞,直到从附加进程接收到一行文本(或EOF),然后为您提供它读取的数据.只要每个数据块都在自己的行上,那就应该有效.

但是,如果在不修改Perl脚本的情况下运行此代码,则很长一段时间内都不会得到任何输出,可能直到Perl脚本执行完毕.这是因为Perl块缓冲区默认输出到管道.您可以通过更改打印范围中的全局变量来告诉它更频繁地刷新缓冲区:

use English qw(-no_match_vars);

local $OUTPUT_AUTOFLUSH = 1;

print ...;

标签:python,return,perl,continuous

来源: https://codeday.me/bug/20190625/1287156.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值