Невозможно передать аргументы с пробелами в скрипт Python из C#
Я вызываю скрипт Python из С # с помощью метода ProcessInfoStart. В качестве аргумента он получает 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.
2 ответа
Параметры скрипта Python можно заключить в одинарные кавычки, чтобы прочитать всю строку, включая пробелы.
Попробуйте заключить строку JSON в одинарные кавычки.
Мне пришлось использовать двойные кавычки вокруг аргументов, чтобы весь аргумент с пробелами передавался в скрипт Python.
Process p = new()
{
StartInfo = new ProcessStartInfo(pythonPath, "queryDb.py \"" + query + "\"")
{
UseShellExecute = false,
RedirectStandardOutput = true,
WorkingDirectory = "C:\\Users\\Sora Teichman\\source\\repo"
}
};
p.Start();
Обязательно экранируйте двойные кавычки обратной косой чертой.