Просто попробуйте найти более хорошие ответы,
Я думаю, что один из способов сделать это так:
array.each do |x, condition_| ## each element is [x, true]
(condition_ = false; next) if
x.nil? || x.respond_to?("string") || x+y[x] == 4
end
Также нет необходимости в for
.
spawn
expect
команда не tcl
команда. exec
tcl
команда.
spawn
создает процесс. Ввод и вывод процессов соединен для ожидания для использования другим ожидать команды: send
, expect
и interact
.
exec
создает подпроцесс под tcl. В целом tcl приостановлен, пока подпроцесс не завершается. Однако один может создавать подпроцесс в фоновом режиме (использующий & как последний аргумент) и если Вы поднимаете трубку ввод и вывод правильно, tcl может взаимодействовать с подпроцессом. Это очень неуклюже и является точно видом взаимодействия, которые ожидают, был разработан для обработки гладко.
Более простой способ ответить на вопрос перефразирует его для выяснения, когда необходимо использовать должностное лицо по сравнению с икрой. Короче говоря, используйте икру для интерактивных команд и должностное лицо для неинтерактивных команд.
Стоит также отметить, что некоторые (многие?) Программы ведут себя по-разному при запуске пользователем (т. Е. По команде линия) против того, чтобы быть частью пакетного процесса / запустить из другого процесса. Фактическая разница заключается в том, есть ли терминал, подключенный к процессу.
Команда spawn, часть расширения Expect для Tcl, устанавливает все так, что исполняемая программа видит себя запущенной пользователем, а затем добавляет функциональность, чтобы позволить Программа tcl для взаимодействия с внешней программой удобным способом (т. е. сопоставление ее вывода с помощью регулярных выражений и ответвление от этих совпадений). Вещи, запускаемые через spawn, запускаются асинхронно.
Команда exec - это основная команда Tcl, которая запускает другую программу и возвращает свой вывод. Он не выполняет никаких сложных настроек, которые делает spawn, но может быть очень удобно просто для запуска программы и просмотра ее результатов (и кода возврата). Вещи, выполняемые exec, по умолчанию выполняются синхронно, но амперсанд в конце команды приводит к тому, что он запускается в фоновом режиме (очень похоже на традиционные сценарии оболочки).
Команда open, хотя обычно используется для чтения / записывать файлы, также можно использовать для запуска внешних процессов. Перед именем команды символом pipe (|) вы указываете ей запускать внешний процесс и получать доступ к дескрипторам файлов чтения / записи для взаимодействия с результирующим процессом. Это своего рода золотая середина между exec и spawn, с гораздо большим взаимодействием с доступным процессом, но без сложной среды, которую делает spawn.
Насколько я знаю, икра возвращает идентификатор процесса (и связывается в с, Ожидают), в то время как должностное лицо просто возвращает финал stdout, если Вы не передаете "&";. таким образом, это не будет влиять на Ваш, ожидает.