Shell 管道python字符串到perl脚本

Shell 管道python字符串到perl脚本,shell,perl,Shell,Perl,我想通过管道将文件路径从Python传输到Perl脚本。虽然我熟悉Python和Bash,但对Perl一无所知。 我有以下(示例)文件: return.py uniprot.pl 当我从shell调用perl文件时,比如:perl uniprot.pl data/test.txt,它工作得很好 我尝试了不同的方法来将python打印传输到这个调用,但显然是错误的: 1. python3 return.py | perl uniprot.pl 这将给出:失败,获取的内部服务器错误为500http

我想通过管道将文件路径从Python传输到Perl脚本。虽然我熟悉Python和Bash,但对Perl一无所知。
我有以下(示例)文件:

return.py

uniprot.pl

当我从shell调用perl文件时,比如:
perl uniprot.pl data/test.txt
,它工作得很好

我尝试了不同的方法来将python打印传输到这个调用,但显然是错误的:

1.

python3 return.py | perl uniprot.pl
这将给出:
失败,获取的内部服务器错误为500http://www.uniprot.org/uploadlists/
。然而,正如我所知的代码工作(如上所述),这必须是由错误的管道造成的

2

python3 return.py | perl uniprot.pl -
这将给出:
无法打开文件-:在/usr/share/perl5/LWP/UserAgent.pm第476行没有这样的文件或目录。
因此字符串似乎被传递到了perl文件,但是perl正在寻找一个完全不同的目录

3
我更改了这一行:
my$list=$ARGV[0]--到-->
我的$list=
然后再次调用上述两个命令(因此为1和2)。两者都给出:
无法打开文件data/test.txt
:在/usr/share/perl5/LWP/UserAgent.pm第476行没有这样的文件或目录。


问题
如何将字符串从
return.py
传递到
uniprot.pl

您需要检查参数是通过命令行参数给出的还是通过STDIN提供的

my $file;
if (@ARGV) {
    $file = $ARGV[0];
}
else {
    chomp($file = <STDIN>); # chomp removes linebreak
}
my$文件;
如果(@ARGV){
$file=$ARGV[0];
}
否则{
chomp($file=);#chomp删除换行符
}

非常感谢!这只会给你第一行输入,不是吗?肯定不是Python的问题-你对C程序、shell脚本或另一个perl脚本也会有同样的问题,但是,我不确定我是否真的应该打印字符串,还是应该执行其他操作@brunodesthuilliers如果这是程序的例外输出,那么是的,打印它是正确的操作。
python3 return.py | perl uniprot.pl -
my $file;
if (@ARGV) {
    $file = $ARGV[0];
}
else {
    chomp($file = <STDIN>); # chomp removes linebreak
}