[英]Get and Set the position in Process.StandardOutput
举个例子,我打开 CMD 并导航到我想从中获取数据的文件夹,然后我用它打开带有标准输入(全部同步)代码的应用程序
public static Process Start(bool DoNotShowWindow = false)
{
ProcessStartInfo cmdStartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = DoNotShowWindow
};
Process cmdProcess = new Process
{
StartInfo = cmdStartInfo,
EnableRaisingEvents = true
};
return cmdProcess;
}
//in other method
Process cli = InteractWithConsoleApp.Start();
cli.Start();
cli.StandardInput.WriteLine("cd /");
cli.StandardInput.WriteLine("cd " + path);
cli.StandardInput.WriteLine("fantasygold-cli getbalance abc");
Thread.Sleep(5000);
现在,当我使用 StandardOutput.Readline 时,它会从头开始返回所有内容,例如版权的前两行、空行,甚至是输入,在我的情况下,在等待 5 秒后我想要读取的结果行或到结束取决于我输入的输入。
我发现的一个解决方案是更改位置,但结果证明它不支持它,甚至复制到另一个流阅读器也不起作用(位置不是按行)。
好吧,我可以使用过滤器,例如检查双精度或以 F 开头且长度为 36 的地址。当我想获取整个 JSON 表示过去的交易时,问题就出现了,我认为使用诸如 '{ 之类的过滤器' 然后检查 '}'警告,这将是我不想要的错误代码。
TLDR那么,我的问题的解决方案是什么:)
我找到了答案,要在子目录中打开文件只需使用这个cli.StartInfo.FileName = Directory.GetCurrentDirectory() + @"\\SubfolderName\\fantasygold-cli";
以及像 getbalance as cli.StartInfo.Arguments = "getbalance amunim"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.