c#-在SSH.NET中执行长时间命令并在TextBox中连续显示结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-在SSH.NET中执行长时间命令并在TextBox中连续显示结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2328字,纯文字阅读大概需要4分钟。
内容图文
![c#-在SSH.NET中执行长时间命令并在TextBox中连续显示结果](/upload/InfoBanner/zyjiaocheng/686/130baeb7e962451aa97db9a5aaf972bc.jpg)
有什么方法可以执行Linux命令并在Windows应用程序(如PuTTY)中的文本框中显示结果.
例如,我正在尝试执行以下命令
wget http://centos-webpanel.com/cwp-latest
sh cwp-latest
使用以下代码
SshClient sshclient = new SshClient(IPtxtBox.Text, UserNameTxt.Text, PasswordTxt.Text);
sshclient.Connect();
ShellStream stream = sshclient.CreateShellStream("customCommand", 80, 24, 800, 600, 1024);
resultTxt.Text = SSHCommand.SendCommand(stream, "wget http://centos-webpanel.com/cwp-latest && sh cwp-latest");
private static void WriteStream(string cmd, StreamWriter writer, ShellStream stream)
{
writer.WriteLine(cmd);
while (stream.Length == 0)
Thread.Sleep(500);
}
private static string ReadStream(StreamReader reader)
{
StringBuilder result = new StringBuilder();
string line;
while ((line = reader.ReadLine()) != null)
result.AppendLine(line);
return result.ToString();
}
private static string SendCommand(ShellStream stream, string customCMD)
{
StringBuilder strAnswer = new StringBuilder();
var reader = new StreamReader(stream);
var writer = new StreamWriter(stream);
writer.AutoFlush = true;
WriteStream(customCMD, writer, stream);
strAnswer.AppendLine(ReadStream(reader));
string answer = strAnswer.ToString();
return answer.Trim();
}
该命令需要花费一定的时间才能执行,并且结果文本框中没有显示任何结果.
解决方法:
首先,除非有充分的理由,否则不要使用“ shell”通道来自动执行命令.使用“ exec”通道(SSH.NET中的CreateCommand或RunCommand).
要将输出提供给TextBox,只需继续在后台线程上读取流:
private void button1_Click(object sender, EventArgs e)
{
new Task(() => RunCommand()).Start();
}
private void RunCommand()
{
var host = "hostname";
var username = "username";
var password = "password";
using (var client = new SshClient(host, username, password))
{
client.Connect();
// If the command2 depend on an environment modified by command1,
// execute them like this.
// If not, use separate CreateCommand calls.
var cmd = client.CreateCommand("command1; command2");
var result = cmd.BeginExecute();
using (var reader =
new StreamReader(cmd.OutputStream, Encoding.UTF8, true, 1024, true))
{
while (!result.IsCompleted || !reader.EndOfStream)
{
string line = reader.ReadLine();
if (line != null)
{
textBox1.Invoke(
(MethodInvoker)(() =>
textBox1.AppendText(line + Environment.NewLine)));
}
}
}
cmd.EndExecute(result);
}
}
有关稍微不同的方法,请参见类似的WPF问题:SSH.NET real-time command output monitoring.
内容总结
以上是互联网集市为您收集整理的c#-在SSH.NET中执行长时间命令并在TextBox中连续显示结果全部内容,希望文章能够帮你解决c#-在SSH.NET中执行长时间命令并在TextBox中连续显示结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。