борьба с расширением оболочки
Вопрос
Чтобы немного прояснить ситуацию, я нахожусь в процессе разработки серьезной игры (~ совместное моделирование) с Netlogo с использованием Hubnet.Я бы хотел динамически связать NetLogo с внешней моделью, чтобы игроки могли:1) запустите внешнюю программу (т.е.модель) из своего клиентского интерфейса hubnet, указывая параметры в качестве входных данных, и 2) иметь доступ к результатам моделирования (т.е.считывание выходных данных модели в виде внешних файлов).
Я нашел этот пост:https://groups .yahoo.com/neo/groups/netlogo-users/conversations/topics/8145
итак, я скачал / установил расширения оболочки с NetLogo 5.0.5 (Mac OsX 10.7.5) и начал играть с ней.
Хорошие вещи я умею выполнять :
наблюдатель>оболочка:cd "путь"
наблюдатель>оболочка:pwd
наблюдатель>оболочка:exec "ls" (и все команды, которым не нужны входные параметры, такие как оболочка:exec "cal", оболочка: exec "df"...).
Теперь о плохих вещах...
1) Мне постоянно не удается запустить какое-либо случайное приложение, используя эти команды:observer>оболочка:exec "Safari.app" или observer>оболочка:exec "Safari" (--> ошибка)
Мой рабочий каталог правильный, и Safari (или другие приложения, которые я пытаюсь запустить) действительно присутствует, но NetLogo возвращает следующую ошибку:
Исключение расширения:Не удается запустить программу "Safari" (в каталоге "/Applications"):ошибка = 2, такого файла или каталога нет ошибка при запуске observer SHELL: EXEC вызывается командным центром
2) Я также изо всех сил пытаюсь выполнять команды оболочки, принимая параметры (например, оболочка: exec "открыть" "параметр 1" "параметр 2" ...).Я не могу найти правильный синтаксис, чтобы NetLogo не распознал входные параметры, которые я пытаюсь передать команде.
У меня очень ограниченный опыт работы с Unix, и я относительный новичок в NetLogo, так что, должно быть, я где-то что-то упускаю.
Если бы кто-нибудь мог помочь мне в этом, я был бы очень признателен!
Большое спасибо!
Clément
Решение
Это OS X, вы должны использовать open
чтобы открыть .app
Файлы.Как вы заметили, вы должны разделять аргументы программы.Итак
(shell:exec "open" "/Applications/Safari.app")
должен делать то, что ты хочешь.
Вот пример реального исполняемого файла с несколькими аргументами:
(shell:exec "ls" "-l" "-t")
Наконец, обратите внимание, что shell:exec
является репортером.Он возвращает выходные данные программы в виде строки.