从C#调用的Python脚本获取返回值

1 投票
1 回答
4181 浏览
提问于 2025-04-18 10:26

我正在尝试用C#来获取下面这个Python脚本的返回值(一个列表)。但是,使用流读取器时,我得到的响应是空的(null)。虽然我打印结果时可以在流读取器中看到信息,但当我用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:\Python27\python.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 个回答

3

命令行程序的返回值总是一个整数,这个整数用来表示在执行过程中是否出现了错误。你不能像这里这样返回一个列表。

正确的方法是让脚本把列表的内容打印到标准输出(就像你注释掉的 print 语句那样),然后你的C#代码再去读取这些内容。另一种方法是让脚本把列表写入一个文件,然后你的C#代码去读取这个文件。

撰写回答