Applescript, эквивалентные из, “продолжаются”?

На момент написания моего текущего комментария я не знал о потоках PHP. Я сам пришел к поиску ответа, но один из обходных путей заключается в том, что PHP-программа, которая получает запрос от веб-сервера, делегирует всю формулировку ответа консольному приложению, которое сохраняет свои выходные данные, ответ на запрос, в двоичный файл. и программа PHP, которая запустила консольное приложение, возвращает этот двоичный файл побайтно в качестве ответа на полученный запрос. Консольное приложение может быть написано на любом языке программирования, работающем на сервере, включая те, которые имеют надлежащую поддержку потоков, в том числе программы на C ++, использующие OpenMP.

Один ненадежный, грязный трюк состоит в том, чтобы использовать PHP для выполнения консольного приложения «uname»,

uname -a

и распечатать вывод этой консольной команды в вывод HTML, чтобы узнать точную версию. серверного программного обеспечения. Затем установите точно такую ​​же версию программного обеспечения на экземпляр VirtualBox, скомпилируйте / соберите все необходимые автономные, предпочтительно статические, двоичные файлы, а затем загрузите их на сервер. С этого момента приложение PHP может использовать эти двоичные файлы в роли консольного приложения, которое имеет правильную многопоточность. Это грязный, ненадежный обходной путь в ситуации, когда администратор сервера не установил все необходимые реализации языка программирования на сервер. Остерегайтесь того, что при каждом запросе PHP-приложение получает консольное (-ие) приложение (-ы) / exit / get_killed.

Что касается того, что администраторы хостинг-службы думают о таких шаблонах использования сервера, я думаю, это сводится к культуре. В Северной Европе поставщику услуг необходимо предоставить то, что было объявлено, и если было разрешено выполнение консольных команд и разрешена загрузка файлов, не относящихся к вредоносным программам, и поставщик услуг имеет право уничтожить любой процесс сервера через несколько минут или даже через 30 секунд. то у администраторов хостинг-сервиса нет никаких аргументов для формирования правильной жалобы. В Соединенных Штатах и ​​Западной Европе ситуация / культура очень разные, и я считаю, что есть большой шанс, что в США и / или Западной Европе поставщик услуг хостинга откажется обслуживать клиентов услуг хостинга, которые используют описанный выше прием. Это только мое предположение, учитывая мой личный опыт работы с хостинг-службами в США и то, что я слышал от других о хостинг-сервисах в Западной Европе. На момент написания моего текущего комментария (2018_09_01) я ничего не знаю о культурных нормах южно-европейских поставщиков услуг хостинга, администраторов южно-европейских сетей.

34
задан danieljimenez 21 June 2009 в 20:03
поделиться

1 ответ

После поиска именно этой проблемы я нашел в Интернете этот отрывок из книги . Он точно отвечает на вопрос, как пропустить текущую итерацию и перейти прямо к следующей итерации цикла repeat .

В Applescript есть exit repeat , что полностью завершит цикл , пропуская все оставшиеся итерации. Это может быть полезно в бесконечном цикле, но в данном случае это не то, что нам нужно.

Очевидно, в AppleScript нет функции, подобной continue , но вот трюк для ее моделирования:

set aList to {"1", "2", "3", "4", "5"}

repeat with anItem in aList -- # actual loop
    repeat 1 times -- # fake loop
        set value to item 1 of anItem

        if value = "3" then exit repeat -- # simulated `continue`

        display dialog value
    end repeat
end repeat

Это отобразит диалоговые окна для 1, 2, 4 и 5.

Здесь вы создали два цикла: внешний цикл - это ваш фактический цикл, внутренний цикл - это цикл, который повторяется только один раз. exit repeat выйдет из внутреннего цикла, продолжая внешний цикл: именно то, что мы хотим!

Очевидно, если вы воспользуетесь этим, вы потеряете возможность выполнять обычный exit repeat .

44
ответ дан 27 November 2019 в 16:45
поделиться
Другие вопросы по тегам:

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