【发布时间】:2018-10-07 14:33:05
【问题描述】:
作为一个例子,我打开 CMD 并导航到我想要从中获取数据的文件夹,然后我用它打开应用程序,其中包含标准输入的 arugents(所有同步)代码到目前为止
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 来表示过去的交易时,问题就出现了,我认为使用过滤器像 '{' 然后检查 '}'Caveat in this 将是糟糕的代码,我不想要。
TLDR那么,这里有什么可以解决我的问题:)
【问题讨论】:
-
你不能直接启动
fantasygold-cli而不是通过CMD.exe吗? -
还有什么问题?您在此处显示的代码有效,对吗?该工具发送到 StandardOut 的内容由您自行解析,没有什么魔法。
-
@rene cli 位于子文件夹钱包中,因此我使用 CMD。问题是我必须解析数据,例如检查它是否为获取余额的双倍数据,但是当我开始检查可能包含多个“{”、“}”或“[”的过去交易时,可能会出现真正的问题, ']' 使得解析变得困难并且标准输出的位置不是预期输出的位置加上没有方法跳过行,因为流阅读器就是这样工作的,顺便说一句,很抱歉刚刚看到电子邮件的回复晚了。
-
分享示例输出以及您当前必须解析该输出的内容以及您期望从 Parse 方法得到的结果。
-
我找到了答案,要在子目录中打开文件,只需使用此
cli.StartInfo.FileName = Directory.GetCurrentDirectory() + @"\SubfolderName\fantasygold-cli";@rene thnx 寻求帮助