То, что лучший способ состоит в том, чтобы проверить терминальную команду, работало успешно в направляющих?

Причина, по которой await изменил ситуацию, заключается в том, что любой await будет ожидать хотя бы микротрубу - независимо от того, является ли ожидаемое вами значение Future или нет. Если это Future, он будет ждать его завершения или выполнения микрозадачи, если она уже завершена. Он будет вести себя идентично, если бы вы await null; следовали за controller.add(2);.

В общем случае StreamController не знает, когда все слушатели получили событие, особенно учитывая такие вещи, как асинхронные слушатели или Stream.asyncMap .

6
задан Devar-TTY 5 October 2008 в 01:51
поделиться

4 ответа

При использовании Kernel.system () метод, он возвратит булевскую переменную, указывающую на успех команды.

result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error

Существует хорошее сравнение различных рубиновых системных команд здесь.

8
ответ дан 17 December 2019 в 00:16
поделиться

Как Вы выполняете внешние команды? Ruby system() функциональные возвраты true или false в зависимости от того, была ли команда успешна. Кроме того, $? содержит ошибочное состояние.

2
ответ дан 17 December 2019 в 00:17
поделиться
  1. Только, чтобы быть педантичными, Вы не можете проверить exec'd управляют потому что exec заменяет текущую программу exec'd команда, таким образом, команда никогда не возвращалась бы к Ruby для проверки.
  2. Для CP, по крайней мере, Вы, вероятно, были бы лучше из использования модуля FileUtils (часть Библиотеки Стандарта Ruby), вместо того, чтобы опуститься до оболочки.
  3. Как отмечено выше, $? предварительно определенная переменная даст Вам код возврата последней команды, которая будет выполняться system() или оператор обратной галочки.
1
ответ дан 17 December 2019 в 00:17
поделиться

Для обновления 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
-4
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

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