我在这个网站上发现了一个问题,告诉我如何从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