[英]Running python script from perl, with argument to stdin and saving stdout output
我的perl腳本位於路徑:
a/perl/perlScript.pl
我的python腳本位於路徑:
a/python/pythonScript.py
pythonScript.py
從stdin獲取一個參數,並將結果返回到stdout。 從perlScript.pl
,我想將pythonScript.py
與hi
一起運行,並將結果保存到某個變量中。 那就是我嘗試過的:
my $ret = `../python/pythonScript.py < hi`;
但出現以下錯誤:
The system cannot find the path specified.
您能否解釋找不到的路徑?
qx
運算符 (backticks)啟動外殼程序( sh
),其中prog < input
語法期望一個名為input
的文件 ,該文件將從其中讀取行並將其饋送到程序prog
。 但是您希望python腳本在其STDIN
上接收字符串hi
而不是名稱為hi
的文件的行。
一種方法是直接執行此操作,即my $ret = qx(echo "hi" | python_script)
。
但是我建議考慮為此使用模塊。 這是IPC :: Run3的簡單示例
use warnings;
use strict;
use feature 'say';
use IPC::Run3;
my @cmd = ('program', 'arg1', 'arg2');
my $in = "hi";
run3 \@cmd, \$in, \my $out;
say "script's stdout: $out";
該program
是腳本的可執行文件的路徑,或者是python script.py
。 這將由system
運行,以便在完成后獲得輸出,這與問題中的嘗試一致。 有關模塊的操作,請參見文檔。
此模塊旨在簡化,同時“ 滿足使用system
, qx
和open3 [...]
99%的需求 。有關更多功能和控制,請參閱IPC :: Run 。
之所以收到此錯誤,是因為您使用的是Shell重定向,而不僅僅是傳遞參數
../python/pythonScript.py < hi
告訴您的Shell從當前目錄中名為hi的文件中讀取輸入,而不是將其用作參數。 你的意思是
my $ret = `../python/pythonScript.py hi`;
它可以使用hi參數正確執行您的python腳本,並將結果返回到變量$ret
。
在一些其他的答案的假設hi
必須作為命令行參數的Python腳本傳遞,但提問者說,這是來自標准輸入。
從而:
my $ret = `echo "hi" | ../python/pythonScript.py`;
要啟動外部腳本,您可以執行
system "python ../python/pythonScript.py hi";
然后在你的python腳本中
import sys
def yourFct(a, b):
...
if __name__== "__main__":
yourFct(sys.argv[1])
您可以在此處獲得有關python部分的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.