C# Не запускается файл python, содержащий киррилицу в пути, в процессе командной строки
Имеется небольшое WPF приложение, в функционал которого входит запуск скриптов на python. При запуске файлов не содержащих киррилицу в пути все проходит гладко, однако если в пути кириллица, python выдает ошибку:
C:\Users\The Bruno\source\repos\CommandExecutor\CommandExecutor\bin\Debug>
python "C:\Users\The Bruno\Desktop\ъюфsss\Python works\GUI_opener.py"
python: can't open file 'C:\Users\The Bruno\Desktop\╤К╤О╤Дsss\Python works\GUI_opener.py':
[Errno 2] No such file or directory
При этом имя пути неправильно кодируется, можно ли как-то исправить, вот укороченный код:
public Process CmdProcess = new Process();
ProcessStartInfo cmdStartInfo = new ProcessStartInfo("cmd");
cmdStartInfo.WorkingDirectory = SelfPath;
cmdStartInfo.UseShellExecute = false;
cmdStartInfo.CreateNoWindow = true;
cmdStartInfo.RedirectStandardInput = true;
cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.RedirectStandardOutput = true;
CmdProcess.StartInfo = cmdStartInfo;
CmdProcess.OutputDataReceived += cmdProcess_OutputDataReceived;
CmdProcess.ErrorDataReceived += cmdProcess_ErrorDataReceived;
CmdProcess.Start();
CmdProcess.BeginOutputReadLine();
CmdProcess.BeginErrorReadLine();
private void StartPyCommand()
{
CurrentFileName = EntryTextBox.Text;
fullScan(SelfPath, CurrentFileName);//возвращает CurrentFileDir путь до дирректории файла
CmdProcess.StandardInput.WriteLine($"python \"{$@"{CurrentFileDir}\{CurrentFileName}"}\"");
CurrentFileDir = "";
}
private void cmdProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Dispatcher.Invoke(() =>
{
if ((Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(e.Data))).StartsWith(@"C:\"))
//{ ConsoleOutTextBox.Text += $"[{EntryTextBox.Text}] >>> \n"; }
{ ConsoleOutTextBox.Text += Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(e.Data)) + "\n"; }
else
{ ConsoleOutTextBox.Text += Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(e.Data)) + "\n"; }
ConsoleScrollbarDiv.ScrollToEnd();
});
}
private void cmdProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Dispatcher.Invoke(() =>
{
if ((Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(e.Data))).StartsWith(@"C:\"))
//{ ConsoleOutTextBox.Text += $"[{EntryTextBox.Text}] >>> \n"; }
{ ConsoleOutTextBox.Text += Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(e.Data)) + "\n"; }
else
{ ConsoleOutTextBox.Text += Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(e.Data)) + "\n";}
ConsoleScrollbarDiv.ScrollToEnd();
});
}
Ответы (1 шт):
Автор решения: Anton.dev
→ Ссылка
Интерпретатор Python нне понимает кодировку, с которой ОС создает директории.
Тут поможет только одно - создйте для скриптов папку без кирилических символов.