Захват возвращаемого значения скрипта python, вызванного из C#

#c# #python

#c# #python

Вопрос:

Я пытаюсь захватить возврат (список) из приведенного ниже скрипта python, используя C #. Stream Reader выдает мне значение null в качестве ответа. Однако, когда я печатаю результат, я получаю информацию в stream Reader, но когда я использую return (list), этого не происходит.Я перепробовал много способов. Ссылки и любая информация приветствуются. Python:

 def main1():

    data1 =send_initdata("i", sock)

    list.append (send_data("a", sock,"1"))
    list.append (send_data("b", sock,"2"))

    #print (list)
    return (list)


if __name__ == '__main__':sys.exit(main1())  
  

C#:

     void run_cmd()
    {


        ProcessStartInfo start = new ProcessStartInfo();
        start.FileName = @"C:Python27python.exe";
        start.Arguments = string.Format("{0} {1}", "Function.Py", "");
        start.UseShellExecute = false;
        start.RedirectStandardOutput = true;
        start.CreateNoWindow = true;


        using (Process process = Process.Start(start))
        {
            using (StreamReader reader = process.StandardOutput)
            {
                var result = reader.ReadLine();

            }
        }
  

Ответ №1:

Возврат из процесса командной строки всегда является целым числом и предназначен для указания наличия или отсутствия ошибок во время выполнения. Вы не можете вернуть список, как вы пытаетесь сделать здесь.

Правильный путь — заставить скрипт распечатать содержимое списка в стандартный вывод (как это делает ваш прокомментированный print оператор), а затем прочитать это, как это делает ваш код на C #. В качестве альтернативы скрипт может записать список в файл, а затем ваш код на C # прочитает этот файл.

Комментарии:

1. Большое спасибо за информацию, Эндрю! Теперь в C #, если я использую scope = engine. ExecuteFile( fileName); Как я могу использовать область видимости для запуска файла python? Файл Python, который имеет:if name == ‘ main ‘:sys.exit(main1()) Ценю вашу помощь!

2. Извините, я мало что знаю о работе Python, просто о процессах командной строки в целом.

3. Спасибо, Эндрю, у вас случайно нет идеи, как я могу захватить команду печати одной функции python? var ipy = Python. CreateRuntime(параметры); динамический Python_File = ipy. UseFile(«Function.Py «); Python_File.main1();// как я могу получить этот вывод?

4. Я не знаю, что Python.CreateRuntime это такое. Это железный Python? Возможно, что API просто отправляет выходные данные скрипта python непосредственно в стандартный вывод вашего процесса C #.