2016-04-15 3 views
0

以下のコードが最初に "eof"(インタラクションウィンドウで)を印刷する理由を理解できません。私はDrRacketを使用しています。ラケット関数を呼び出した後のEOFの取得

(find-first-path (car 
    (regexp-split #px"\n" 
     (with-output-to-string 
      (λ() (system "find /usr/lib/ -name 
libpython2.7.so")))))) 
+0

?あなたはダイアログを意味しますか?はいの場合は、スクリーンショットを添付できますか? –

+0

ありがとうございましたが、Johnさんが質問に回答しました – user618677

答えて

2

systemライブラリ関数は、(現在の入力ポート)から入力 かかりシェルプロセスを開始します。 DrRacketでは、これにより、サブプロセスへの入力として扱われる入力を入力することができる、対話ウィンドウのサブウィンドウ(short- 存続)サブウィンドウが作成されます。

ので、例えば、このプログラムに

#lang racket 

(system "cat") 

を実行してみてください、あなたが入力ウィンドウに入力各行は 猫プロセスにパイプされている羽目になります。あなたが終了したら、EOFをサブプロセス に送る方法が必要です。これは右の "EOF"ボタンの機能です。

このウィンドウを表示したくない場合は、あなたのサブプロセスに空の入力ストリーム を作成することができ、例えば:対話の窓に

(parameterize ([current-input-port (open-input-string "")]) 
    (system "find /usr/lib/ -name libpython2.7.so")) 
+0

私はこのメッセージをDrRacketの "subprocess:/ bin/shへのアクセスを禁止されています(実行)"のフッターにも表示しています。私はこのメッセージも見たいとは思わない。 – user618677

+1

私は確信が持てませんが、DrRacketがデフォルトで有効にしている自動コンパイルから来ていると思われます。無効にすることはできますが、そうしたくない場合もあります。他の構文エラーの自動検出も防止します。私はそれがあまりにもあなたを気にしないならば、あなたはそれを無視することをお勧めします。 –

関連する問題