Как лучше всего проверить успешность выполнения команды терминала в Rails?
-
05-07-2019 - |
Вопрос
Я пишу быстрое приложение Rails и задаюсь вопросом, как я могу проверить успех выполняемой команды.Я запускаю две команды: обновление SVN и cp из одного каталога в другой.
Решение
Если вы используете Ядро.система() метод, он вернет логическое значение, указывающее на успех команды.
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
Есть хорошее сравнение различных системных команд Ruby. здесь.
Другие советы
Как вы выполняете внешние команды? Функция Ruby system ()
возвращает true
или false
в зависимости от того, была ли команда успешной. Кроме того, $?
содержит состояние ошибки.
<Ол>
Просто чтобы быть педантичным, вы не можете проверить команду
По крайней мере, для cp вам лучше использовать модуль FileUtils (часть стандартной библиотеки Ruby), чем переходить на оболочку.
Как отмечалось выше, предопределенная переменная
Ол>
exec
'd, потому что exec
заменяет текущую программу на exec
' d команда, поэтому команда никогда не вернется в Ruby для проверки. $?
предоставит вам код возврата последней команды, которая должна быть выполнена system ()
или оператором обратной галочки. Для обновления SVN проверьте номер версии до и после обновления.
svn_start_version = IO.popen("svn info").readlines[4]
`svn update`
svn_end_version = IO.popen("svn info").readlines[4]
if svn_end_version > svn_start_version
"success"
end
Для cp вы можете проверить размер файла, если исходный файл равен скопированному файлу.
source_file_size = IO.popen("du file1").readlines
`cp file1 file2`
dest_file_size = IO.popen("du file2").readlines
if dest_file_size == source_file_size
"success"
end
Не связан с StackOverflow