例如,我打开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秒的结果后,我想读取行或结束,这取决于输入的位置。
可能的解决方案
我发现的一个解决方案是改变位置,但结果证明它不支持,甚至复制到另一个流读取器也不起作用(位置不是按行)。
我可以使用像check a double这样的过滤器,或者一个地址以F开头,长度为36。当我想得到整个JSON时,问题就来了,就像过去的事务一样,我认为使用像{这样的过滤器,然后检查}
那么,我的问题有什么解决办法:)