从perl运行python脚本,参数为stdin并保存stdout输出

从perl运行python脚本,参数为stdin并保存stdout输出,python,perl,Python,Perl,我的perl脚本位于路径: a/perl/perlScript.pl my $ret = `../python/pythonScript.py < hi`; The system cannot find the path specified. 我的python脚本位于路径: a/perl/perlScript.pl a/python/pythonScript.py my $ret = `../python/python

我的perl脚本位于路径:

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
我的python脚本位于路径:

a/perl/perlScript.pl
a/python/pythonScript.py
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
pythonScript.py
从stdin获取一个参数,并将结果返回给stdout。从
perlScript.pl
,我想用参数
hi
运行
pythonScript.py
到stdin,并将结果保存在某个变量中。这就是我尝试的:

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            

您能解释找不到的路径吗?

要启动外部脚本,您可以执行以下操作

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
system "python ../python/pythonScript.py hi";
然后在python脚本中

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
import sys
def yourFct(a, b):
    ...

if __name__== "__main__":
    yourFct(sys.argv[1])

您可以获得有关python部分的更多信息,以启动您可以执行的外部脚本

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
system "python ../python/pythonScript.py hi";
然后在python脚本中

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
import sys
def yourFct(a, b):
    ...

if __name__== "__main__":
    yourFct(sys.argv[1])

您可以获得有关python部分的更多信息

您会遇到此错误,因为您使用的是shell重定向,而不仅仅是传递参数

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
../python/pythonScript.py < hi

它使用hi参数正确执行python脚本,并将结果返回到变量
$ret

您会遇到此错误,因为您使用的是shell重定向,而不仅仅是传递参数

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
../python/pythonScript.py < hi
它使用hi参数正确执行python脚本,并将结果返回到变量
$ret

其他一些答案假设
hi
必须作为命令行参数传递给python脚本,但asker说它来自stdin

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
因此:

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
其他一些答案假设
hi
必须作为命令行参数传递给Python脚本,但询问者说它来自stdin

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
因此:

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
(backticks)启动一个shell(
sh
),在该shell中,
prog
语法名为
input
,它将从中读取行并将它们馈送到程序
prog
。但是您希望python脚本在其
STDIN
上接收字符串
hi
,而不是名为
hi
的文件行

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
一种方法是直接这样做,
my$ret=qx(echo“hi”| python_脚本)

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
但是我建议考虑使用这个模块。下面是一个简单的示例

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
如果脚本是可执行的,则
程序
是脚本的路径,或者
python script.py
。这将由
系统运行
,因此一旦完成,将获得输出,这与问题中的尝试一致。有关模块的操作,请参阅文档

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
本模块旨在简单,同时“满足99%的使用
系统
qx
open3[…]
的需要。有关更多的功能和控制,请参阅。

(反勾号)启动外壳(
sh
),其中的
prog
语法名为
input
,它将从中读取行并将它们馈送到程序
prog
。但是您希望python脚本在其
STDIN
上接收字符串
hi
,而不是名为
hi
的文件的行

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
一种方法是直接这样做,
my$ret=qx(echo“hi”| python_脚本)

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
<>但是我建议考虑使用这个模块。下面是一个简单的例子:

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
程序
是脚本的路径,如果脚本是可执行的,或者可能是
python script.py
。这将由
系统运行
,因此一旦完成,将获得与问题中的尝试一致的输出。有关模块的操作,请参阅文档

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.            
本模块旨在简单,同时“满足99%的使用
系统
qx
open3[…]
的需求”。有关更多的电源和控制,请参阅

a/perl/perlScript.pl
my $ret = `../python/pythonScript.py < hi`;                   
The system cannot find the path specified.