2015-09-13 5 views
0

Мне нужна помощь при выполнении команд asterisk cli с использованием C#. Я могу открыть окно терминала и запустить звездочку (см. Код ниже), но не знаю, как выполнить команду «sip show peers» в CLI. Есть ли способ сделать это?выполнить команду asterisk cli C#

using System; 
using System.Diagnostics; 

namespace runGnomeTerminal 
{ 
    class MainClass 
    { 
     public static void ExecuteCommand(string command) 
     { 
      Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.FileName = "/bin/bash"; 
      proc.StartInfo.Arguments = "-c \" " + command + " \""; 
      proc.StartInfo.UseShellExecute = false; 
      proc.StartInfo.RedirectStandardOutput = true; 
      proc.Start(); 

      while (!proc.StandardOutput.EndOfStream) { 
       Console.WriteLine (proc.StandardOutput.ReadLine()); 
      } 
     } 

     public static void Main (string[] args) 
     { 
      ExecuteCommand("gnome-terminal -x bash -ic 'cd $HOME; sudo asterisk -vvvvr; bash'"); 

     } 
    } 
} 
+0

Вы должны подать вход в 'asterik' с помощью ввода с клавиатуры (' stdinput')? Вы можете использовать 'StreamReader' вашего созданного процесса для ввода ввода в этот процесс (свойство StandardInput), не забудьте установить' RedirectStandardInput' в 'true'. Если команды передаются через аргументы командной строки оболочки, вы должны изменить вызов 'ExecuteCommand'. –

ответ

0

Вы можете выполнить Звездочка кли команду непосредственно из Баша, просто -x в команду звездочки. Например, ExecuteCommand("gnome-terminal -x bash -ic 'cd $HOME; sudo asterisk -rx "sip show peers"; bash'");.

1

Все, что вы делаете, - это излишество. Вам просто нужно запросить звездочку для команды, нет необходимости в bash или терминале.

Process proc = new System.Diagnostics.Process(); 
proc.StartInfo.FileName = "/usr/sbin/asterisk"; 
proc.StartInfo.Arguments = "-rx \" " + command + " \""; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.Start(); 

Но обратите внимание, что команда запускает новый звездообразный процесс, поэтому не оптимальный. Лучший способ - использовать AMI-интерфейс asterisk (который является только подключением tcp, тем меньше ресурсов используется) и выдавать AMI action COMMAND. Существует ряд уже разработанных интерфейсов AMI, включая C# one.