Perl調用外部命令的方式和區別

來源:互聯網
上載者:User

標籤:

主要的方式簡述如下:
1. system("command");
使用該命令將開啟一個子進程執行引號中的命令,父進程將等待子進程結束並繼續執行下面的代碼。

2. exec("command");
效果同system命令類似,區別是不會開啟子進程,而是取代父進程,因此執行完引號中的命令後進程即結束。一般和fork配合使用。

3. `command`;
使用反引號調用外部命令能夠捕獲其標準輸出,並按行返回且每行結束處附帶一個斷行符號。反引號中的變數在編譯時間會被插入為其值。

4. open LIST "ls -l|";
    open MORE "|more";
    @list=<LIST>;
    print MORE @list;
    close(LIST);
    close(MORE);
使用帶管道的檔案控制代碼來執行外部命令,使用方式與讀寫檔案類似。可以從外部命令的輸出讀取資料,也可以將資料輸出到外部命令作為輸入。

5. defined(my $pid=fork) or die "Can not fork: $!\n";
    unless ($pid) {
        exec ("date");
    }
waitpid ($pid,0);
使用fork將會開啟子進程與父進程同時執行之後的代碼,其中父進程中fork會返回一個非零的數,而子進程中將返回零。上面的程式碼完成和system("date")相同的功能。比起system單純地調用外部命令,fork可以完成更加複雜的進程操作。


 

在Perl中用system、exec、readpipe函數來執行系統命令

轉自:http://cn.waterlin.org/

在Perl中,可以用system、exec、readpipe這三個命令來調用其他指令碼、系統命令等。這三個命令的主要區別就是傳回值。

1) 對於system這個函數來說,它會返回執行後的狀態,比如說

@args = (“command”, “arg1″, “arg2″);
system(@args) == 0
or die “system @args failed: $?”

當然,你也可以用類似於下面的語句來檢查出錯的原因:

if ($? == -1) {
print “failed to execute: $!\n”;
}
elsif ($? & 127) {
printf “child died with signal %d, %s coredump\n”,
($? & 127),  ($? & 128) ? ‘with’ : ‘without’;
}
else {
printf “child exited with value %d\n”, $? >> 8;
}

2) 而對於exec這個函數來說,僅僅是執行一個系統的命令,一般情況下並沒有傳回值。exec只有在系統沒有你要執行的命令的情況下,才會返回false值。

exec (‘foo’)   or print STDERR “couldn’t exec foo: $!”;
{ exec (‘foo’) }; print STDERR “couldn’t exec foo: $!”;

3) 當我們需要儲存系統命令啟動並執行結果,以便分析並作進一步的處理時,就要用到readpipe這個函數了。例如:

@result = readpipe( “ls -l /tmp” );
print “@result”;

會產生如下的結果:

drwxr-xr-x  2 root   root    4096 Mar 19 11:55 testdir

當然,你也可以把產生的結果放到一個檔案裡,以便寫工作日誌呀、發布報告呀。

$inject_command = “./ConfigChecker.bat F:/nic/3502/ARRAY-4AD2E0573/etc “.$device_name;
chdir “F:/TestTools/bin/”;
@temp_result = readpipe($inject_command);
open(result_file,”>result.txt”);
print result_file @temp_result;
close(result_file);

這樣,你就把系統啟動並執行結果扔到了系統命令所在目錄下的result.txt檔案裡了。

 

完!

 

Perl調用外部命令的方式和區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.