1

私は次のようなことをしようとしています:

let execute command =
    System.Diagnostics.Process.Start (command)
    sprintf "%s (command output!)" command

let shell fmt = Printf.ksprintf execute fmt

printfn "%s" (shell "ls -a %s" "/Users/david")

意図した出力は次のようになります。

ls -a /Users/david (command output!)

executeしかし、結果の型が「エスケープ」する方法がわかりませんksprintf。の出力をキャプチャする方法はありますexecuteか?

4

1 に答える 1

2

プロセスの出力をキャプチャする必要があります。デフォルトでは、含まれているアプリと同じ端末を使用するだけです。のようなもの(http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspxから取得)

let execute command =
    let p = new System.Diagnostics.Process(command)
    p.UseShellExecute <- false;
    p.RedirectStandardOutput<-true //you might want to do stderr as well
    p.Start()
    let output = p.StandardOutput.ReadToEnd()
    p.WaitForExit()
    sprintf "%s %s" command output
于 2013-01-09T05:19:10.963 に答える