2016-05-14 8 views
2

私のシステムのために、静的なhtmlファイルをディレクトリ構造から読み込むスクリプトを作成しようとしています。ラケットのスポーンまたはシステム

idはタスクにracketを使用するのが好きですが、いくつかの重要な機能、特にCコールの「システム」などのサブプロセスを生成する機能を見つけるのは難しいです。

ラケットの内側からコマンドラインを呼び出して出力をキャプチャする最も簡単な方法は何ですか?

+2

ただ、ドキュメント検索:http://docs.racket-lang.org/search/index.htmlを?q = system –

+0

私は正しい方向に向いているよりも、 "システム"は検索エンジンにとって泥だらけの言葉なので、多くの結果があります。 –

+0

一般的な検索エンジンの場合は間違いありません。しかし、言語固有のドキュメンテーションで十分狭められます。 –

答えて

3

実際には、Cのシステムと同様に動作する2つの機能があります。systemsystem*です。 (サブプロセスを起動する他の方法もありますが、これらの2つの方法は他の多くの言語と同じですが、最も単純な方法です。

2つのうちsystemはより簡単なものです。より多くのあなたができることを意味し、それはもう少し使用する複雑ですが、それはリストとして引数に取るよう、私は、少し良くsystem*が好き

(system "ls -l") 

、:次のようなことを行うことができます文字列その方法彼らとラケットで簡単に遊ぶことができます。

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

これで、実行しているコマンドの入出力ポートを変更したり、ラケットのparametersで現在の作業ディレクトリを変更したりすることができます。具体的には、current-directorycurrent-input-port、およびcurrent-output-portが必要です。

また、いくつかのwith-関数を使用すると、入力ポートと出力ポートをより便利に変更できます。

実行した結果を例えばls -lの文字列として保存するには、次のコードを使用します。 (。better ways to get the contents of your root directoryがラケットであることに注意してください、これはシェルスクリプトのためのラケットを使用してのほんの一例です)

(parameterize ([current-directory "/"]) 
    (with-output-to-string 
     (λ() 
     (system* (find-executable-path "ls") "-l")))) 
関連する問題