【问题标题】:Trying to send a C# array to Python and read it as a list尝试将 C# 数组发送到 Python 并将其作为列表读取
【发布时间】:2020-01-17 14:33:33
【问题描述】:

所以我正在使用 WPF 制作一个 GUI。所有的 GUI 交互(选择复选框、填写文本框等)都将作为参数发送到 Python 脚本,并指示 Python 脚本最终将处理什么。在大多数情况下,大多数数据都传递了固定数量的元素,但是,我传递的最后两条数据的大小取决于用户输入的内容(这些变量是 frequencyDynamicListfrequencyIndexList) .将这些数组作为参数发送的最佳方式是什么?

private static void run(string path, int[] temperatureList, int[] dataList, float[] toggleData, int toggleEnable, int[] bandEnable, List<string> frequencyDynamicList, List<int> frequencyIndexList)
{
    Process p = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    //startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = "/c \"python ProcessDataGUI.py\"" + " "
                              + path + " "
                              + temperatureList[0] + " " + temperatureList[1] + " " + temperatureList[2] + " " + temperatureList[3] + " " + temperatureList[4] + " "
                              + dataList[0] + " " + dataList[1] + " " + dataList[2] + " " + dataList[3] + " " + dataList[4] + " " + dataList[5] + " " + dataList[6] + " "
                              + toggleData[0] + " " + toggleData[1] + " " + toggleData[2] + " " + toggleData[3] + " " + toggleData[4] + " " + toggleData[5] + " " + toggleData[6] + " "
                              + toggleEnable + " "
                              + bandEnable[0] + " " + bandEnable[1] + " " + bandEnable[2] + " "
                              + frequencyDynamicList.ToArray() + " " + frequencyIndexList.ToArray();
    p.StartInfo = startInfo;
    p.Start();
}

【问题讨论】:

标签: c# python arrays cmd arguments


【解决方案1】:

首先,我建议您使用类而不是自变量。

private class MyData {
    int[] TemperatureList { get; set; }
    int[] DataList { get; set; }
    float[] ToggleData { get; set; }
    int ToggleEnable { get; set; }
    int[] BandEnable { get; set; }
    List<string> FrequencyDynamicList { get; set; }
    List<int> FrequencyIndexList { get; set; }
}

那么就可以使用下面的代码了:

private static void run(string path, MyData myData)
        {
            Process p = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo();
            //startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = "/c \"python ProcessDataGUI.py\"" + " "
                                  + path + " "
                                  + string.Join(" ", myData.TemperatureList.Cast<int>().ToList()) + " "
                                  + string.Join(" ", myData.DataList.Cast<int>().ToList()) + " "
                                  + string.Join(" ", myData.ToggleData.Cast<float>().ToList()) + " "
                                  + toggleEnable + " "
                                  + string.Join(" ", myData.BandEnable.Cast<int>().ToList()) + " "
                                  + string.Join(" ",FrequencyDynamicList); + " " 
                                  + string.Join(" ",FrequencyIndexList);
            p.StartInfo = startInfo;
            p.Start();
        }

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多