2016-05-14 36 views
2

即時通訊嘗試爲我的系統編寫一個腳本,從目錄結構中填充靜態html文件。產卵或從球拍系統

id更喜歡使用racket來完成任務,但我有diffaculty發現一些關鍵特性,最重要的是產生子處理的能力,比如C調用「system」。

什麼是調用命令行並從球拍內部捕捉輸出的最簡單方法。

+2

只要搜索的文檔:http://docs.racket-lang.org/search/index.html ?q = system –

+0

thanka用於指向我的正確方向,「系統」對於搜索引擎來說是一個渾濁的術語,所以很多結果 –

+0

對於一般的搜索引擎,當然。但語言特定的文檔可以足夠縮小它們。 –

回答

3

實際上有兩個函數的工作方式類似於C中的系統,它們是:systemsystem*。 (有產卵關子過程的其他方式,但是這兩個是最簡單的工作很相似,許多其他語言。

在這兩個,system是最簡便的一個,並在命令把你想作爲一個運行。字符串這樣,你可以做的事情,如:

(system "ls -l") 

雖然這是一個稍微複雜的使用,我喜歡system*好一點,因爲它需要的參數作爲一個列表,這意味着你可以更輕鬆與球拍一起玩。

(system* (find-executable-path "ls") "-l") 

現在,您可以執行諸如更改正在運行的命令的輸入和輸出端口,甚至通過Racket的parameters更改當前工作目錄。具體而言,您需要current-directory,current-input-portcurrent-output-port

您還可以使用多個with-函數來更方便地更改輸入和輸出端口。

把它放在一起,例如,我可以將運行ls -l的結果作爲字符串使用以下代碼保存。 (請注意,在球拍better ways to get the contents of your root directory,這僅僅是使用球拍的shell腳本的例子。)

(parameterize ([current-directory "/"]) 
    (with-output-to-string 
     (λ() 
     (system* (find-executable-path "ls") "-l"))))