gpt4 book ai didi

c# - 向 stdin 发送命令并发送传输结束 (Ctrl+D)

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:55 25 4
gpt4 key购买 nike

我想运行下面的代码。

我正在调用的应用程序需要下一行的 User-Name=albert 之类的命令、另一个命令等等,直到您完成为止。

如果您要从命令行手动输入,您将输入命令,按回车键,输入命令按回车键。在最后一个命令后按下 ENTER 后,您可以按 Ctrl + D 结束它,这将运行程序并返回说明发生了什么。

如果您输入了错误的命令,应用程序会显示“expecting =",这意味着您发送的行格式不正确...

所以我在下面做的是模拟手动输入,一个命令,换行,一个命令,换行等,直到最后,然后我只需在最后一个命令后附加 Ctrl+D。这不起作用,程序显示“expecting ="

有什么明显的问题吗?

感谢您的宝贵时间。阿尔伯特

        // CREATE DISCONNECT FILE
StringBuilder sb = new StringBuilder();
sb.AppendLine("User-Name=" + this.userName);
sb.AppendLine("Acct-Session-Id=" + this.sessionID);
sb.AppendLine("NAS-IP-Address=" + Setting.Item["EDGE.NASIP"]);
sb.AppendLine("Framed-IP-Address=" + this.currentIP);
sb.Append("/x4");
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo();
procStartInfo.WorkingDirectory = radclientPath.Substring(0, radclientPath.LastIndexOf("\\"));
procStartInfo.FileName = radclientPath;
procStartInfo.Arguments = @"-r 1 -d ..\etc\raddb -x 192.168.1.240:3799 disconnect password";
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;

System.Diagnostics.Process proc = System.Diagnostics.Process.Start(procStartInfo);

proc.StandardInput.Write(sb.ToString());
proc.WaitForExit(5000);

if (proc.HasExited)
{
System.IO.File.WriteAllText(@"D:\temp.txt", proc.StandardOutput.ReadToEnd());
System.IO.File.WriteAllText(@"D:\temp2.txt", proc.StandardError.ReadToEnd());
string message = proc.StandardOutput.ReadToEnd() + "\n---\nErrors:\n---\n" + proc.StandardError.ReadToEnd();
return message;
}
System.IO.File.WriteAllText(@"D:\temp.txt", proc.StandardOutput.ReadToEnd());
System.IO.File.WriteAllText(@"D:\temp2.txt", proc.StandardError.ReadToEnd());
return "";
}

我也试过用单引号和零开头的数字 (\x04) 也没有,所以我试着把应该发送给程序的内容写到文本文件中。然后我使用与下面相同的命令行参数运行程序。复制整个文本文件中的内容并将其粘贴到命令提示符中,效果很好。不确定为什么它没有正确发送到标准输入..

        StringBuilder sb = new StringBuilder();
sb.AppendLine("User-Name=" + this.userName);
sb.Append('\x04');
System.IO.File.WriteAllText(@"D:\input.txt", sb.ToString());
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo();
procStartInfo.WorkingDirectory = radclientPath.Substring(0, radclientPath.LastIndexOf("\\"));
procStartInfo.FileName = radclientPath;
procStartInfo.Arguments = @"-r 1 -d ..\etc\raddb -x 192.168.1.240:3799 disconnect password";
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
System.Diagnostics.Process proc = System.Diagnostics.Process.Start(procStartInfo);
proc.StandardInput.Write(sb.ToString());
proc.WaitForExit(5000);

最佳答案

你需要写 append "\x04",带反斜杠 (\)

有关详细信息,请参阅 documentation (字符串转义序列部分)

关于c# - 向 stdin 发送命令并发送传输结束 (Ctrl+D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com