Получить и установить позицию в Process.StandardOutput - PullRequest
0 голосов
/ 07 октября 2018

См. В качестве примера, я открываю 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, например, за прошлые транзакции, для чего я думаю использовать фильтры типа '{', а затем проверить for '}' Предупреждение в этом было бы плохим кодом, который мне не нужен.

TLDR

Итак, что может быть решением моей проблемы здесь:)

1 Ответ

0 голосов
/ 13 октября 2018

Я нашел ответ, чтобы открыть файл в подкаталоге, просто используйте это cli.StartInfo.FileName = Directory.GetCurrentDirectory() + @"\SubfolderName\fantasygold-cli";

и аргументы типа getbalance как cli.StartInfo.Arguments = "getbalance amunim"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...