Как вызвать ServoBlaster с C # /Mono?

Я успешно установил ServoBlaster , и он отлично работает с терминалом с помощью команды

echo p1-22=250 > /dev/servoblaster 

, как указано в документации.

Однако, когда я пытаюсь вызвать его из Mono с кодом

string cmd = "echo p1-22=50 > /dev/servoblaster";;
Process proc = new Process();
proc.StartInfo.FileName = "/bin/bash";
proc.StartInfo.Arguments = cmd; 
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.RedirectStandardOutput = false;
proc.Start();
proc.WaitForExit();

Он ничего не делает, и я не получаю ошибки. Что я делаю неправильно?

3 голоса | спросил Steve French 2 62013vEurope/Moscow11bEurope/MoscowSat, 02 Nov 2013 23:18:56 +0400 2013, 23:18:56

1 ответ


2

Вы можете попробовать и использовать вызов bash invoke и выполнить -c и процитированную командную строку (Это должно решить проблему экранирования символа)

Process proc = new Process();
proc.StartInfo.FileName = "/bin/bash";
proc.StartInfo.Arguments = "-c 'echo p1-22=250 > /dev/servoblaster'"; 
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.RedirectStandardOutput = false;
proc.Start();
proc.WaitForExit();

Но это может не сработать, поэтому попробуйте использовать ProcessStartInfo, который по своей сути ждет завершения всего завершения обработки перед выходом.

 string executable = "/bin/bash";
 string args = "echo p1-22=250 > /dev/servoblaster";

 ProcessStartInfo procInfo = new ProcessStartInfo(executable , args);
 procInfo.UseShellExecute = false;
 procInfo.CreateNoWindow = true;
 procInfo.RedirectStandardOutput = true;
 procInfo.RedirectStandardError = true;

 Process proc = System.Diagnostics.Process.Start(procInfo);
 proc.WaitForExit();       
 int exitCode = proc.ExitCode;
 proc.Close();

Мне повезло с запуском скриптового файла, а не для непосредственного запуска команд. Это, скорее всего, причина по экранированию персонажа, которая требуется при передаче аргументов напрямую в bash. Создание файла сценария с помощью команд внутри них может решить проблему, с которой вы столкнулись.

touch servo.sh
chmod +x servo.sh

Добавьте команды в скрипт

#!/bin/bash
echo p1-22=250 > /dev/servoblaster
ответил ppumkin 6 32013vEurope/Moscow11bEurope/MoscowWed, 06 Nov 2013 21:12:52 +0400 2013, 21:12:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132