如何使用Perl将Curl输出存储到文件中?

时间:2018-02-19 08:23:09

标签: perl

我有一个目录,有很多.wav文件。我通过curl命令读取每个文件的数据并将其存储到不同的文件中。

这不是完整的脚本。脚本的某些部分 -

@command= '--request POST --data-binary "@Raajpal_long.wav" 
 "https://services.govivace.com:49162/SpeakerId
 action=search&confidence_threshold=0.0&number_of_matches=20&format=8K_PCM16"';

 $stdout=system("curl @command");

当我运行perl脚本时,它在命令行窗口提供输出:

{"status": 0, "processing_time": 96.0, "enrollment_audio_time": 131.10000610351562, "matches": [{"speaker": "sw", "identification_score": 252.54136657714844}]}

我想将此输出存储到文件中。

我用过 -

open (FILE, ">1.txt") or die "Unable to open "1.txt";
$stdout=system("curl @command");
print FILE $stdout;

只保存零(0);

任何人都可以告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

你已经开始乞求卷曲来提出要求;使用curl的-o/--output选项写入文件而不是stdout会更清晰。

-o, --output <file>
     

将输出写入而不是stdout。如果您使用的是{}或[]   获取多个文档,你可以使用'#'后跟一个数字    符。该变量将被当前替换   要提取的URL的字符串。喜欢在:

     

curl http://{one,two}.example.com -o "file_#1.txt"

     

或使用几个变量,如:

     

curl http://{site,host}.host[1-5].com -o "#1_#2"

     

您可以使用此选项的次数与您拥有的URL数量相同。   例如,如果在同一命令行中指定两个URL,则可以   像这样使用它:

     

curl -o aa example.com -o bb example.net

     

并且-o选项和URL的顺序无关紧要   第一个-o是第一个URL,依此类推,所以上面的命令行   也可以写成

     

curl example.com example.net -o aa -o bb

答案 1 :(得分:-2)

您无法使用系统捕获输出,您可以使用反引号``代替系统。

类似的东西:

my @command= '--request POST --data-binary "@Raajpal_long.wav"
 "https://services.govivace.com:49162/SpeakerId
action=search&confidence_threshold=0.0&number_of_matches=20&format=8K_PCM16"';

my $result = `curl @command`;

if ( $? == -1 ){
    print "\n Curl Command failed: $!\n";
} elsif ($? == 0 ) {
    print "$result\n";
}