1. 程式人生 > >R語言shell、system、shell.exec函式詳解

R語言shell、system、shell.exec函式詳解

一、system函式:呼叫引數command指定的作業系統命令

system(command,intern=false,ignore.stdout=false,ignore.stderr=false,wait=true,input=NULL,show.output.on.console=true,minimized=false,invisible=true)
1.command:字串
    解析為一個命令+空格分隔的引數,如果命令的路徑(或單個引數本身-如檔案路徑)包括空格,則必須由shQuote引用,在Windows上只允許使用雙引號(可以使用paste,paste0拼接),windows路徑名上不允許包含雙引號,所以不用擔心轉義嵌入的引號
    command必須是可執行檔案(副檔名為.exe,.com);批處理檔案(副檔名.bat,.cmd),如果沒有提供將依次嘗試這些副檔名,不能使用重定向\DOS內部命令\管道
    command可以是shell認為可執行的任何內容,包括shell指令碼,也可以包括多個命令,命令以;區分開,在Windows系統中函式system不會使用shell,但shell()函式可將命令傳遞給shell
2.intern:宣告是否將系統命令的執行結果作為R的字串輸出(true則用popen呼叫命令,否則用C函式system呼叫)
3.wait:R是否需要等待作業系統命令執行完畢,或者是可以非同步執行;如果設定intern=T,則該引數將被忽略
4.show.output.on.console:宣告是否將執行作業系統命令的結果,顯示在R控制檯前
5.minimized:是否將CMD視窗最小化表示
    注:最後兩個引數只能在Windows作業系統中使用
    注:如果命令無法執行,status返回值127
    注:如果得到一個非零的退出狀態,則丟擲一個警告資訊,並在結果屬性status中提示
6.可通過鍵盤操作(Rgui中使用Esc鍵,Rterm中使用Ctrl+C)或在Rgui選單裡,中斷正在執行(等待中)的命令:這個操作會將控制權返回給R控制檯.R會試圖完全中斷該過程,但可能需要強制終止,並有可能丟失未儲存的工作等

#使用-f列出當前目錄中的所有檔案 
system("ls -f")
#t1是一個字元向量,各個元素分別對應於who輸出的每一行(假設該平臺存在物件who) 
t1<-try(system("who", intern = TRUE))
system(paste('"c:/Program Files/Mozilla Firefox/firefox.exe"', '-url cran.r-project.org'), wait = FALSE)
system("java -jar F:/.../SeleniumSever/selenium-server-standalone-3.8.1.jar",wait = F)
system("java -Dwebdriver.chrome.driver=F:/.../SeleniumSever/chromedriver.exe",wait = F)

二、shell函式簡介:使用shell執行cmd在shell下的命令

shell(cmd,shell,flag=”\c”,intern=FALSE,wait=TRUE,translate=FALSE,mustWork=FALSE)
1.translate:如果TRUE,“/”在cmd中將被轉換為“\”
2.mustWork:如果TRUE,執行命令失敗會提示R錯誤,FALSE則出現警告資訊
3.shell:shell名稱字串(bash,tcsh,sh),使用shell=NULL則呼叫cmd命令,在這種情況下.exe是假定的副檔名,如果給出副檔名,可以直接使用批處理檔案
shell是對system更友好化的包裝(升級版、補充版,shell在原CMD基礎上做了很多修改調整,增加了很多命令及命令別名),該功能僅在Windows上存在

三、shell.exec函式:開啟一個檔案或URL

#注意設定預設瀏覽器
shell.exec("http://fund.eastmoney.com/favor.html")
shell.exec("C:/Program Files/BreezeSys/BreezeBrowser/Breezebrowser.htm")