我想将一个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阵列的情况下要做什么。由于出现错误,无法将其作为列表传递
进程只能通过执行参数(通常称为
args
或argv
)或标准输入(stdio)交换数据;而ran进程只能以标准输出(stdout)、标准错误(stderr)或退出代码(0-255之间)的形式返回数据因此,您必须将2d数组和一维向量序列化为c#和python都可以读取的格式。它可以是任何二进制数据,但我建议您将JSON作为标准输入传递给python脚本,python脚本可以在标准输出上输出JSON,您可以用c#读取和解析
使用不同类型的数据运行python脚本的示例:
或
PS:要在python中写入标准输出,只需使用
print()
编辑:在YouTube视频中,这些家伙通过执行参数传递值(3:52)。如果你想遵守惯例,而不是通过考试
将列表转换为Json:
并将该json作为参数传递
然后必须在python脚本中解码JSON
相关问题 更多 >
编程相关推荐