perl呼叫外部命令的方式和區別
**:主要的方式簡述如下:
1. system("command");
使用該命令將開啟乙個子程序執行引號中的命令,父程序將等待子程序結束並繼續執行下面的**。
2. exec("command");
效果同system命令類似,區別是不會開啟子程序,而是取代父程序,因此執行完引號中的命令後程序即結束。一般和fork配合使用。
3. `command`;
使用反引號呼叫外部命令能夠捕獲其標準輸出,並按行返回且每行結束處附帶乙個回車。反引號中的變數在編譯時會被內插為其值。
4. open list "ls -l|";
open more "|more";
@list=;
print more @list;
close(list);
close(more);
使用帶管道的檔案控制代碼來執行外部命令,使用方式與讀寫檔案類似。可以從外部命令的輸出讀取資料,也可以將資料輸出到外部命令作為輸入。
5. defined(my $pid=fork) or die "can not fork: $!\n";
unless ($pid)
waitpid ($pid,0);
使用fork將會開啟子程序與父程序同時執行之後的**,其中父程序中fork會返回乙個非零的數,而子程序中將返回零。上面的**完成和system("date")相同的功能。比起system單純地呼叫外部命令,fork可以完成更加複雜的程序操作。
在perl中用system、exec、readpipe函式來執行系統命令
**:在perl中,可以用system、exec、readpipe這三個命令來呼叫其他指令碼、系統命令等。這三個命令的主要區別就是返回值。
1) 對於system這個函式來說,它會返回執行後的狀態,比如說
@args = (「command」, 「arg1″, 「arg2″);當然,你也可以用類似於下面的語句來檢查出錯的原因:system(@args) == 0
or die 「system @args failed: $?」
if ($? == -1)2) 而對於exec這個函式來說,僅僅是執行乙個系統的命令,一般情況下並沒有返回值。exec只有在系統沒有你要執行的命令的情況下,才會返回false值。elsif ($? & 127)
else
exec (『foo』) or print stderr 「couldn』t exec foo: $!」;3) 當我們需要儲存系統命令執行的結果,以便分析並作進一步的處理時,就要用到readpipe這個函式了。例如:; print stderr 「couldn』t exec foo: $!」;
@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;這樣,你就把系統執行的結果扔到了系統命令所在目錄下的result.txt檔案裡了。chdir 「f:/testtools/bin/」;
@temp_result = readpipe($inject_command);
open(result_file,」>result.txt」);
print result_file @temp_result;
close(result_file);
完!
php 無法執行外部命令 如何呼叫外部命令
呼叫外部命令的函式有很多 system passthru escapeshellcmd pcntl exec exec 關於他們的使用我不過度闡述了 然而有時候會遇到這樣的情況 當我們在php指令碼中新增了這樣的命令 例 exec rm rf a b c html 的時候 始終不能執行 問題一 我碰...
Java中呼叫外部命令
public class exec mond 執行一條命令 param execstr string 命令字串 return string 執行命令錯誤時的資訊。public static string exec string execstr 執行linux下的命令 執行windows下的命令 st...
php呼叫外部命令(Linux下)
exec cp fpath.tpath,out,status 複製檔案,fpath為原檔案位址,tpath為要複製到的位置路徑,status為執行結果返回值。include conn to.php top sql select from uchome pic where 1 order by pic...