【发布时间】:2015-03-22 15:47:30
【问题描述】:
尝试使用以下 F# 代码捕获 Windows 命令提示符输出:
let cmd = new Process()
cmd.StartInfo.FileName <- "cmd.exe"
cmd.StartInfo.UseShellExecute <- false
cmd.StartInfo.CreateNoWindow <- true
cmd.StartInfo.RedirectStandardInput <- true
cmd.StartInfo.RedirectStandardOutput <- true
cmd.StartInfo.RedirectStandardError <- true
cmd.Start() |> ignore
let input = cmd.StandardInput
let output = cmd.StandardOutput
let err = cmd.StandardError
input.AutoFlush <- true
input.Write("dir" + Environment.NewLine)
input.Write("exit" + Environment.NewLine)
cmd.WaitForExit()
if not cmd.HasExited then cmd.Kill()
input.Flush()
let result = output.ReadToEnd()
let error = err.ReadToEnd()
printfn "RESULT\n%s\nERROR\n%s" result error
input.Close()
output.Close()
err.Close()
cmd.Dispose()
结果...
RESULT
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\{username}\AppData\Local\Temp>dir
C:\Users\{username}\AppData\Local\Temp>exit
ERROR
'dir' is not recognized as an internal or external command,
operable program or batch file.
事实上,所有其他命令的结果都是相同的 ('{command}' is not recognized...),例如 cd.. 等,否则从手动启动和键入的命令提示符下可以正常工作。
我做错了什么?
【问题讨论】:
-
在 Visual Studios 2013 中运行上述代码对我来说效果很好。我无法重现您的错误。
标签: .net process cmd f# command-prompt