如何将2D数组和向量从C#传递到python?

2024-05-14 10:43:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将一个2D数组和一个一维向量传递给python脚本,并在C#中以一维向量的形式接收输出。到目前为止,我一直在关注这段视频:

https://www.youtube.com/watch?time_continue=1&v=g1VWGdHRkHs&feature=emb_logo

这只显示了如何将字符串传递给python

更新:

我正在合并@Danon的方法。到目前为止,我有以下代码:

static void Main(string[] args)
        {
            double[] a = { 1, 2, 3, 4, 5 };
            List<double> lst = a.ToList();

            string jsona = new JavaScriptSerializer().Serialize(lst);


            var psi = new ProcessStartInfo();
                psi.FileName = @"C:\Users\lavni\Python\Python38\python.exe";

                var script = @"D:\test.py";

                psi.Arguments = string.Format("{0} {1}", script, jsona);
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardError = true;

                var errors = "";
                var results = "";

                using (var process = Process.Start(psi))
                {
                    errors = process.StandardError.ReadToEnd();
                    results = process.StandardOutput.ReadToEnd();

                    Console.WriteLine("Errors");
                    Console.WriteLine(errors);
                    Console.WriteLine();
                    Console.WriteLine("Results");
                    Console.WriteLine(results);

                }

            Console.Read();

        }

我有以下python test.py。这只是将向量乘以5,并以字符串形式接收输出:

import sys
import json
import numpy as np

data = json.loads(sys.argv[1])
res = np.array(data)
res = res*5

print(res)

现在,我可以在C#中传递一个向量并以字符串形式接收输出。现在的问题是,我能否以C#中的列表而不是字符串的形式接收输出。另外,在使用2D阵列的情况下要做什么。由于出现错误,无法将其作为列表传递


Tags: 字符串importtruestringvarresprocess向量
1条回答
网友
1楼 · 发布于 2024-05-14 10:43:30

进程只能通过执行参数(通常称为argsargv)或标准输入(stdio)交换数据;而ran进程只能以标准输出(stdout)、标准错误(stderr)或退出代码(0-255之间)的形式返回数据

因此,您必须将2d数组和一维向量序列化为c#和python都可以读取的格式。它可以是任何二进制数据,但我建议您将JSON作为标准输入传递给python脚本,python脚本可以在标准输出上输出JSON,您可以用c#读取和解析

使用不同类型的数据运行python脚本的示例:

python myfile.py data # passing data as execution parameters

echo "data" | python myfile.py  # passing data on standard input

PS:要在python中写入标准输出,只需使用print()

编辑:在YouTube视频中,这些家伙通过执行参数传递值(3:52)。如果你想遵守惯例,而不是通过考试

psi.Arguments = $"\"{script}\" \"{start}\"";

将列表转换为Json:

string jsonString= new JavaScriptSerializer().Serialize(yourList);

并将该json作为参数传递

psi.Arguments = $"\"{script}\" \"{jsonString}\"";

然后必须在python脚本中解码JSON

相关问题 更多 >

    热门问题