Передача строки Python в скрипт Perl - PullRequest
0 голосов
/ 14 мая 2018

Я хочу передать путь к файлу из Python в скрипт Perl.Хотя я знаком с Python и Bash, я ничего не знаю о Perl.
У меня есть следующие (примеры) файлы:

return.py

print( 'data/test.txt' )

uniprot.pl

use strict;
use warnings;
use LWP::UserAgent;

my $list = $ARGV[0]; # File containg list of UniProt identifiers.
my $base = 'http://www.uniprot.org';
my $tool = 'uploadlists';

my $contact = ''; # Please set your email address here to help us debug in case of problems.
my $agent = LWP::UserAgent->new(agent => "libwww-perl $contact");
push @{$agent->requests_redirectable}, 'POST';

my $response = $agent->post("$base/$tool/",
                            [ 'file' => [$list],
                              'format' => 'fasta',
                              'from' => 'ACC+ID',
                              'to' => 'ACC',
                            ],
                            'Content_Type' => 'form-data');

while (my $wait = $response->header('Retry-After')) {
  print STDERR "Waiting ($wait)...\n";
  sleep $wait;
  $response = $agent->get($response->base);
}

$response->is_success ?
  print $response->content :
  die 'Failed, got ' . $response->status_line .
    ' for ' . $response->request->uri . "\n";

Когда я вызываю perl-файл из оболочки, например: perl uniprot.pl data/test.txt, он работает нормально.

Я пробовал разные подходы, чтобы передать печать Python на этот вызов, но, видимо, неправильные:

1.

python3 return.py | perl uniprot.pl

Это даст: Failed, got 500 Internal Server Error for http://www.uniprot.org/uploadlists/.Однако, как я знаю, код работает (как сказано выше), это должно быть вызвано неправильным трубопроводом.

2

python3 return.py | perl uniprot.pl -

Это даст:Can't open file -: No such file or directory at /usr/share/perl5/LWP/UserAgent.pm line 476. Таким образом, кажется, что строка передается в файл perl, однако perl ищет в совершенно другом каталоге.

3
Я изменил эту строку: my $list = $ARGV[0]; --to -> my $list = <STDIN>; и затем снова вызвал обе вышеуказанные команды (таким образом, 1 и 2).Оба дают: Can't open file data/test.txt : No such file or directory at /usr/share/perl5/LWP/UserAgent.pm line 476.


Вопрос Как передать строку из return.py в uniprot.pl?

1 Ответ

0 голосов
/ 14 мая 2018

Вам нужно проверить, задан ли аргумент через аргументы командной строки или через STDIN.

my $file;
if (@ARGV) {
    $file = $ARGV[0];
}
else {
    chomp($file = <STDIN>); # chomp removes linebreak
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...