我们正在编写一个Xamarin.Mac应用程序。我们需要执行像“uptime”这样的命令,并将其输出读取到要解析的应用程序中。
可以这样做吗?在Swift和Objective-C中有NTask,但我似乎无法在C#中找到任何示例。
答案 0 :(得分:3)
在Mono / Xamarin.Mac下,您可以使用“标准”.Net / C#Process Class作为Process映射到底层操作系统(OS-X For Mono,MonoMac和Xamarin.Mac,以及Mono for * nix)
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// To avoid deadlocks, always read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
我的 OS-X C#代码示例,但它是跨平台的,因为它在Windows / OS-X / Linux下工作,只是您运行的可执行文件在平台上发生变化。
var startInfo = new ProcessStartInfo () {
FileName = Path.Combine (commandPath, command),
Arguments = arguments,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UserName = System.Environment.UserName
};
using (Process process = Process.Start (startInfo)) { // Monitor for exit}
process.WaitForExit ();
using (var output = process.StandardOutput) {
Console.Write ("Results: {0}", output.ReadLine ());
}
}
答案 1 :(得分:0)
var pipeOut = new NSPipe ();
var t = new NSTask();
t.LaunchPath = launchPath;
t.Arguments = launchArgs;
t.StandardOutput = pipeOut;
t.Launch ();
t.WaitUntilExit ();
t.Release ();
var result = pipeOut.ReadHandle.ReadDataToEndOfFile ().ToString ();