Please allow us to customize `OutputStream` and `ExtendedOutputStream` before executing an SSH command.
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- csharp
- Área
- networking
Línea de trabajo
Comienza revisando SshCommand.OutputStream y ExtendedOutputStream, el tipo extensible PipeStream y el punto de entrada ExecuteAsync. Define y valida un mecanismo público de personalización que admita el manejo en tiempo real de la salida estándar y los errores sin reflexión, manteniendo ambos streams utilizables durante la ejecución del comando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I have a use case where I want real time output from the console command to be printed to the console. Unfortunately, the streams that are written to cannot be customized with the existing public interface, even though the PipeStream class is extensible. The best solution I found to do what I need to do unfortunately requires reflection.
A public interface (such as a callback) for this feature would be greatly appreciated.
public static class SshClientExtensions
{
public static async Task<SshCommand> ConnectAndExecuteCommandAsync(this SshClient client, string command, CancellationToken cancellationToken = default)
{
SshCommand sshCommand;
try
{
await client.ConnectAsync(cancellationToken);
sshCommand = client.CreateCommand(command);
using CancellationTokenSource linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
PropertyInfo stdOutProp = typeof(SshCommand).GetProperty(nameof(SshCommand.OutputStream), bindingFlags)!;
PropertyInfo stdErrProp = typeof(SshCommand).GetProperty(nameof(SshCommand.ExtendedOutputStream), bindingFlags)!;
PipeStream stdOutStream = (PipeStream)stdOutProp.GetValue(sshCommand)!;
PipeStream stdErrStream = (PipeStream)stdErrProp.GetValue(sshCommand)!;
await stdOutStream.DisposeAsync();
await stdErrStream.DisposeAsync();
TextWriterPipeStream stdOut = new(Console.Out);
TextWriterPipeStream stdErr = new(Console.Error);
stdOutProp.SetValue(sshCommand, stdOut);
stdErrProp.SetValue(sshCommand, stdErr);
await sshCommand.ExecuteAsync(cancellationToken);
}
catch (Exception e)
{
return await Task.FromException<SshCommand>(e);
}
finally
{
client.Disconnect();
}
return sshCommand;
}
private sealed class TextWriterPipeStream : PipeStream
{
private readonly TextWriter textWriter;
public TextWriterPipeStream(TextWriter textWriter) : base()
{
this.textWriter = textWriter;
}
public override void Write(byte[] buffer, int offset, int count)
{
base.Write(buffer, offset, count);
string output = Encoding.UTF8.GetString(buffer, offset, count);
textWriter.Write(output);
}
}
}
- Lenguaje dominante
- C#
- Estrellas
- 4.4k
- Forks
- 993
- Merge medio
- 9 d 21 h
- PR fusionados (30 d)
- 1
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de sshnet/SSH.NET
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
Using SshClient on Linux under Wine throws System.Security.Cryptography.CryptographicException Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 67/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
Todos los issues de sshnet/SSH.NET
Issues similares
-
CS0162 "Unreachable code detected" warning from a MSBuildTemp .tmp file in every game project Abiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
Type: enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
apache/arrow-adbc#4809 ·
-
type/automation type/tech-debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
microsoft/vscode-azurefunctions#5197 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
microsoft/microsoft-ui-reactor#1274 ·