繁体   English   中英

在 Process.StandardOutput 中获取和设置位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM