2016-06-07 162 views
0

我想用我的Python程序中的參數調用Perl腳本。 到目前爲止,我使用它的子進程和管道如何從Python Perl腳本調用返回值的參數?

#!/usr/bin/python 
import subprocess 
var = "world" 
pipe = subprocess.Popen(["./x.pl", var], stdout=subprocess.PIPE) 
result = pipe.stdout.read() 
print result 

#!/usr/bin/perl 
use strict; 
use warnings; 
my $name = shift; 
print "Hello $name!\n"; 

但作爲命名狀態,它只是管道輸出已經能夠做到。

我需要的是Perl腳本返回一些值(例如在這裏它將返回字符串而不是打印),Python捕獲該值並使用它。

我需要這樣做,因爲Perl腳本已經存在,我試圖把它從CGI轉換(返回每次調用的值)到Python(一個WebSocket的服務器作爲客戶端和腳本之間的代理)

+0

如果您希望更改腳本的操作和交互方式(例如,不要每次啓動腳本),都有無數的方法,這取決於您。它們包括特製的CGI替代品,如FastCGI,SCGI和WSGI。 –

回答

3

就我個人而言,我根本不會改變Perl腳本。它已經被設計爲處理來自其父進程的請求並通過stdout返回其響應。只需爲它提供一個適當的CGI環境。

如果你想返回一個更復雜的結構,你需要序列化它。 JSON通常是最好的選擇。

#!/usr/bin/perl 
use strict; 
use warnings; 
use JSON::XS qw(encode_json); 
my $name = shift; 
print encode_json({ code => 200, content => "Hello, World!\n" }); 
+0

是嗎?我想過,但我試圖不改變/適應我的特殊情況下的原始腳本 –

+0

對不起,我的互聯網切斷了,因爲我正要添加到我的答案。現在已經添加了。 – ikegami

+0

謝謝!您的回覆的第一部分是我認爲我正在尋找的內容..現在,您是否知道我可以查看哪些資源來學習如何爲Python程序內部調用的perl腳本「提供適當的CGI環境」? 我不想修改原始腳本的另一個原因是,我不想爲兩種不同的技術(AJAX和WebSocket)使用兩個單獨的perl腳本(這兩個腳本都是相同的)。 Perl腳本是web應用程序的核心,我預見它會發生很多變化。 –