Автономный исполняемый вывод пуст в C # - PullRequest
0 голосов
/ 15 апреля 2019

Созданный Python автономный исполняемый файл (pwc.exe) всегда выводит html-данные веб-сайта на консоль любого веб-сайта, когда я запускаю его из командной строки.

Но когда я пытаюсь прочитать этот вывод в строку c #, в большинстве случаев (это хорошо работает только на очень маленьких сайтах) я получаю пустую строку в c #.

  1. В этой ситуации все отлично работает

  2. Вывод на консоль правильный, но пустая строка c #

pwc.exe Код:

from lxml import html import requests import sys url=sys.argv[1] host=sys.argv[2] headers = {'Host': host, 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0', 'Accept' : 'Accept: text/css,*/*;q=0.1', 'Accept-Language':'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br', 'Connection':'keep-alive'} r = requests.get(url, headers = headers) r.encoding = 'UTF-8' print (r.text)

код c #:

        var proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = AppDomain.CurrentDomain.BaseDirectory + @"pwc.exe",
                Arguments = "https://www.bbc.com/about-us www.bbc.com",
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true,
                WindowStyle = ProcessWindowStyle.Hidden
            }
        };

        proc.Start();
        string html = proc.StandardOutput.ReadToEnd();

Мне нужно получить вывод консоли pwc.exe (utf8) в строку C #.Похоже, когда я читаю вывод очень маленьких страниц, все работает нормально в C #.

ps Пытался читать так, но это не помогло:

while (!proc.StandardOutput.EndOfStream)
{
html = proc.ou.ReadLine();
}

1 Ответ

0 голосов
/ 15 апреля 2019

Именно из-за этих исключений.

enter image description here

Вы можете обратиться к приведенному ниже коду для отслеживания ошибок в выходных данных. Возможно, вам придется выполнить какое-то преобразование со стороны Python для правильного получения в C # Code.

private static void ProcessItem()
    {
        var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = AppDomain.CurrentDomain.BaseDirectory + @"dist\Webpy\webpy.exe",
                //Arguments = "https://gopro.com/about-us gopro.com",
                //Arguments = "https://www.google.com www.google.com",
                Arguments = "https://www.bbc.com/about-us www.bbc.com",
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
            }
        };
        //* Set your output and error (asynchronous) handlers
        process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
        process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
        //* Start process and handlers
        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();
        process.WaitForExit();
    }

    static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        //* Do your stuff with the output (write to console/log/StringBuilder)
        Console.WriteLine(outLine.Data);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...