有一个小应用程序可以作为控制台使用。当向控制台发送命令时,会进行编码,因为python无法运行名称中包含西里尔字母符号的文件。发送到控制台的字符串以CP866格式编码。可以这么说,如何对这个字符串进行“预编码”,以便在编码时对其进行解码
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 SendEncodedToCmd(string input)
{
input = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(866).GetBytes(input));
CmdProcess.StandardInput.WriteLine(input);
}
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();
});
}
发送包含西里尔文的路径时,会发生以下情况:
C:\Users\The Bruno\source\repos\CommandExecutor\CommandExecutor\bin\Debug>python "\привет"
python: can't open file '\╨┐╤А╨╕╨▓╨╡╤В': [Errno 2] No such file or directory
目前没有回答
相关问题 更多 >
编程相关推荐