2011-01-13 219 views
9

我有一個Perl腳本,我想從Python腳本調用。我一直在尋找,並沒有成功。我基本上試圖調用Perl腳本發送一個變量給它,但不需要Perl腳本的輸出,因爲它是一個自包含的程序。從Python調用Perl腳本

我想出到目前爲止是:

var = "/some/file/path/" 
pipe = subprocess.Popen(["./uireplace.pl", var], stdin=subprocess.PIPE) 
pipe.stdin.write(var) 
pipe.stdin.close() 

纔剛剛起步Python編程,所以我敢肯定,上面是總廢話。任何幫助將非常感激。

回答

7

如果你只是想打開一個管道,一個Perl解釋器,您在正確的軌道上。我認爲你唯一缺少的是perl腳本本身不是可執行文件。所以你需要這樣做:

var = "/some/file/path/" 
pipe = subprocess.Popen(["perl", "./uireplace.pl", var], stdin=subprocess.PIPE) 
pipe.stdin.write(var) 
pipe.stdin.close() 
1

我希望this可以幫助你。否則不知道該怎麼做。

+0

謝謝你的參考...它是由activestate創建和支持..他們似乎放棄了它? – Tagar 2016-03-08 01:18:02

1

你想通過var作爲參數,在標準輸入或兩者?通過它作爲參數,使用

subprocess.call(["./uireplace.pl", var]) 

到管它STDIN,使用

pipe = subprocess.Popen("./uireplace.pl", stdin=subprocess.PIPE) 
pipe.communicate(var) 

兩個代碼段需要uireplace.pl爲可執行。如果不是,你可以使用

pipe = subprocess.Popen(["perl", "./uireplace.pl"], stdin=subprocess.PIPE) 
pipe.communicate(var) 
2

你可以嘗試subprocess.call()方法。它不會返回您正在調用的命令的輸出,而是返回代碼以指示執行是否成功。

var = "/some/file/path" 
retcode = subprocess.call(["./uireplace.pl", var]) 
if retcode == 0: 
    print("Passed!") 
else: 
    print("Failed!") 

確保你的Perl腳本是可執行的。否則,您可以在您的命令Perl解釋器(像這樣):

subprocess.call(["/usr/bin/perl", "./uireplace.pl", var]) 
15

只是做:

var = "/some/file/path/" 
pipe = subprocess.Popen(["perl", "uireplace.pl", var]) 
+1

請注意:由於OP表示他不想獲得輸出,因此不需要「Popen」。使用`subprocess.call`或`subprocess.check_call`更好。 – user225312 2011-01-13 16:11:33

+3

@sukhbir:我認爲當OP說他不需要輸出時,我也可以「假設」他也不想等到perl腳本完成哪個子進程調用或子進程。 check_call`確實:) – mouad 2011-01-13 16:14:01