0

ProcessInfoStart メソッドを使用して c# から python スクリプトを呼び出しています。引数として JSON を受け取り、python スクリプトに入力します。

スペースを入れずに JSON を渡せば問題なく動作しますが、スペースがある場合、元の JSON はスペースまで分割され、引数として渡され、残りは無視されます

public static bool ExecutePythonScript(string jRequest, string fileType)
{
    string pythonExePath = Convert.ToString(ConfigurationManager.AppSettings["PythonExe"]);
    bool bIsExecutionSuccess = true;
    try
    {
        var psi = new ProcessStartInfo();
        psi.FileName = pythonExePath;
        var script = @"C:Scripts\pdf-to-csv.py";

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

        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();
        }

        if (!string.IsNullOrEmpty(errors))
            bIsExecutionSuccess = false;
    }
    catch(Exception ex)
    {
        bIsExecutionSuccess = false;
    }
    return bIsExecutionSuccess;
}

引数を受け取る Python スクリプト

input_params = sys.argv[1]
input_params = input_params.replace("'",'"')
data_params = json.loads(input_params)

スペースを含む jRequestを Python スクリプトに渡す方法はありますか。

4

1 に答える 1

0

スペースを含む文字列全体を読み取るために、Python スクリプトパラメータを一重引用符で囲むことができます。

JSON 文字列一重引用符で囲んでみてください。

于 2020-07-20T10:25:19.583 に答える