2011-06-14 133 views

回答

12

如果您需要捕獲STDOUT

my $ret = `/usr/bin/pdf2txt.py arg1 arg2`; 

您可以輕鬆捕獲STDERR將其重定向到STDOUT:

my $ret = `/usr/bin/pdf2txt.py arg1 arg2 2>&1`; 

如果您需要捕獲退出狀態,那麼你可以使用:

my $ret = system("/usr/bin/pdf2txt.py arg1 arg2"); 

採取記住,無論``system()塊,直到程序執行完畢。

如果您不想等待,或者您需要同時採集STDOUT/STDERR和退出狀態,則應使用IPC::Open3

+3

使用'system'/usr/bin/pdf2txt.py',$ arg1,$ arg2'會更好,因爲這樣可以避免使用shell插值的問題(以及危險的錯誤)。 – friedo 2011-06-14 15:37:51

8
my $output = `/usr/bin/pdf2txt.py arg1 arg2`; 
+0

+1應該工作 – 2011-06-14 07:41:11

+3

確保腳本是可執行的(chmod + x)並且它有適當的hashbang(例如#!/ usr/bin/env python)。 – damg 2011-06-14 07:42:49

2

如果不需要腳本輸出,但你要返回代碼,使用system()

... 
my $bin = "/usr/bin/pdf2txt.py"; 
my @args = qw(arg1 arg2 arg3); 
my $cmd = "$bin ".join(" ", @args); 

system ($cmd) == 0 or die "command was unable to run to completion:\n$cmd\n"; 
+3

不要加入'@ args'。使用'system $ bin,@args;' - 可以避免一些潛在的有害錯誤。 – friedo 2011-06-14 15:38:50