我正在使用C#和Telegram bot开发一个程序来控制我的VPS中的CMD。 Telegram bot和programm之间的连接工作得很好,所以这不是问题。 我想在同一个cmd窗口中从我的Telegram机器人编写命令。 要将字符串命令发送到cmd,我使用:
public static void Trythis(Message comando)
{
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.UseShellExecute = false;
String output = String.Empty;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
sw.WriteLine(comando.Text);
}
}
using (StreamReader streamReader = p.StandardOutput)
{
output = streamReader.ReadToEnd();
Bot.SendTextMessageAsync(comando.Chat.Id, output);
}
}
}
但是我在这部分得到了invalidOperationException:
using (StreamReader streamReader = p.StandardOutput)
{
output = streamReader.ReadToEnd();
Bot.SendTextMessageAsync(comando.Chat.Id, output);
}
答案 0 :(得分:1)
<强>出现InvalidOperationException 即可。
尚未为重定向定义StandardOutput流;确保ProcessStartInfo.RedirectStandardOutput设置为true,ProcessStartInfo.UseShellExecute设置为false。
(或)
已使用BeginOutputReadLine打开StandardOutput流以进行异步读取操作。
我认为你需要在开头添加这一行:
func loadData() {
let query = PFQuery(className: "Noticias")
query.whereKey("titulo", equalTo:"Es Navidad")
query.findObjectsInBackground(block: { (objects : [PFObject]?, error: Error?) -> Void in
if error == nil {
// The find succeeded.
print("Successfully retrieved \(objects!.count) scores.")
// Do something with the found objects
if let objects = objects {
for object in objects {
print(object.objectId!)
}
}
} else {
// Log details of the failure
print("bad day homie")
print(error!)
}
})
}
答案 1 :(得分:0)
using
块的结尾会在包装对象上调用Dispose()
...在第一次调用之后,您关闭并处理您的流。