在Python和Perl脚本之间共享JSON数据

时间:2016-08-22 14:45:17

标签: python json python-2.7 perl

我编写了一个脚本,可以使用一些数据库API。第一个API是用Python编写的,并且往往是脚本的大部分“工作”发生的地方。但是,其中一个数据库API是用Perl编写的,所以我编写了一个小的Perl脚本并用我的Python脚本调用它。这是我的思考过程:

1)我在Python脚本中保存了一组ID,我需要在Perl脚本中使用它们。我认为JSON是分享数据的最佳方式:

with open('IDS.json','w') as jsonfile:
        json.dump(IB_IDS, jsonfile)

因此代码在我的数据库连接方法中,然后从主Python方法中调用。

2)接下来在主python方法中,我创建了一个CallPerlScript()函数,我相信它会打开Perl脚本作为子进程运行:

path="/home/xxx/yyy"
pipe=subprocess.Popen(["perl","./GNOC.pl", path], stdin=subprocess.PIPE)
pipe.stdin.write(path)
pipe.stdin.close()

3)现在在Perl脚本中,我读了JSON文件:

my $idFile='IDS.json';
my $idJSON;

{
        local $/;
        open my $fh, '<', $idFile or die $!;
        $idJSON = <$fh>;
        close $fh;
}

4)然后我用Perl脚本中的数据做“填充”,最终得到一个我现在需要与我的Python脚本共享的电子邮件地址列表。我将此数据保存为Perl脚本中的新JSON文件:

open my $fh, ">", 'email_list.json';
print $fh encode_json(\@email_add);
close $fh

5)现在回到Python脚本中,我应该能够阅读这个刚刚更新的(这是关键的)电子邮件数据并用它来“做更多的事情”:

file='email_list.json'
    input_data=json.loads(open(file).read())

这是我遇到问题的地方。每次我运行这个Python脚本时,当它读取这个JSON文件时(在步骤5中),它是从上次运行脚本时读取数据 。这显然是一个巨大的问题,因为我现在正在使用不正确的数据。

我真的不知道为什么会这样。我在这一点上最好的想法是,当Python子进程调用Perl脚本但后来继续并处理先前已经存储已经email_list.json文件。然后Perl脚本运行,但只在Python脚本终止后才保存新数据。

基本上,我需要在Python脚本终止之前与Python脚本共享Perl JSON数据。

0 个答案:

没有答案