Можно ли создать SWF «командной строки»? - PullRequest
12 голосов
/ 29 июня 2009

Я хотел бы иметь возможность написать файл .swf, который можно запустить как приложение командной строки. Другими словами, я мог бы создавать классы actionscript, которые могут взаимодействовать со stdin и stdout, а затем выполнять этот .swf непосредственно в командной строке.

Я подозреваю, что это на самом деле невозможно. Кто-нибудь может это подтвердить?

EDIT: В паре ответов указывалось, что использование Flash для командной строки, вероятно, не лучший выбор. Я искренне согласен в большинстве ситуаций. Причина, по которой я спрашиваю об этом, заключается в том, что я хочу выполнить генерацию кода AS3, и размышления о классах AS3 во время выполнения будут проще, чем анализ кода или обход промежуточного XML, который создает asdoc. Сейчас я делаю XML-подход в Ruby, но хотел бы иметь более чистое решение!

Ответы [ 10 ]

23 голосов
/ 05 октября 2011

ДА! На самом деле возможно возможно.

Вы можете создать чистый проект AS3 AIR (без окна приложения) и запустить его из командной строки с помощью ADL (AIR Debug Launcher).

ADL выполнит ваш SWF-файл и передаст любые аргументы, которые вы передадите, прямо в ваше приложение во время выполнения - все из командной строки! Чтобы прочитать аргументы из AS3, просто добавьте этот код в ваш основной класс:

package
{
   import flash.desktop.NativeApplication;
   import flash.display.Sprite;
   import flash.events.InvokeEvent;

   public class CmdLine extends Sprite
   {
      public function CmdLine()
      {
         NativeApplication.nativeApplication.addEventListener(
            InvokeEvent.INVOKE, onInvokeEvent); 

         function onInvokeEvent(invocation:InvokeEvent):void { 
            trace(invocation.arguments); 
         } 
      }
   }
}

Ваш основной класс по-прежнему будет расширяться Sprite, но вы не увидите никакого пользовательского интерфейса, если не создадите NativeWindow объекты. Если вы используете Flash Builder, просто создайте новый проект AIR и переименуйте расширение основного файла .mxml в .as (до завершения работы мастера).

Подробнее об ADL: Использование AIR Debug Launcher (ADL)

Также это будет очень полезно: Вызов и завершение приложения AIR

Вы можете сделать весь вывод, используя trace(), записывать файлы или даже записывать напрямую в стандартный вывод, как показано здесь .

8 голосов
/ 29 июня 2009

Очевидно, существует проект Tamarin , целью которого является создание реализации AS3 с открытым исходным кодом. Эта страница дает небольшую информацию о компиляции скрипта AS3 и запуске его из командной строки.

Я не понимаю, насколько стабилен Тамарин, но сейчас это может быть вашим лучшим выбором. С другой стороны, я должен полностью согласиться с @zenazn, что вам было бы лучше долгосрочное изучение языка, более предназначенного для общих целей, но если действительно хочет просто использовать Actionscript, не позволяйте кто-нибудь тебя остановит :) 1009 *

2 голосов
/ 14 октября 2011

Вы можете взаимодействовать с stdin, stdout и stderr с помощью redtamarin

http://code.google.com/p/redtamarin/

см. Примеры / документы здесь

http://code.google.com/p/redtamarin/wiki/System#stdout

http://code.google.com/p/redtamarin/wiki/System#stderr

http://code.google.com/p/redtamarin/wiki/System#stdin

есть разница между Flash и ActionScript 3 Flash - это среда выполнения, AS3 - это язык

Не понимаю, почему AS3 не будет хорошим языком программирования для командной строки и / или стороны сервера

Теперь, redtamarin - это просто среда выполнения, которая позволяет вам запустите исходный код AS3 в командной строке.

Также, в зависимости от ваших потребностей, вы можете использовать его по-разному

  1. для запуска скрипта в командной строке

    $ ./redshell myscript.as

  2. запуск ABC или SWF-файлов в командной строке

    $ ./redshell myscript.abc

    $ ./redshell myscript.swf

  3. запустить возможный

    $ ./myscript

Когда вы запустите скрипт AS3, он будет интерпретироваться динамически, Используя ASC, вы сможете скомпилировать этот же скрипт в файл ABC. это также можно запустить из командной строки.

Если, например, вам нужно собрать множество ABC-файлов вместе, вы можете использовать swfmake , чтобы объединить их в SWF-файл и среду выполнения запустит этот SWF-файл из командной строки.

Наконец, если вам нужно собрать все в один исполняемый файл, Вы можете использовать createprojector , чтобы взять файл ABC или SWF и объединить его с самой средой выполнения, чтобы получить независимый исполняемый файл.

Redtamarin предоставляет собственный API, обеспечивающий доступ к файловой системе, сокеты, информация об операционной системе и т. д.

2 голосов
/ 03 июля 2009

На самом деле, есть проект, который делает это возможным. RedTamarin - это проект, который расширяет AS3 (технически проект Tamarin, который является проектом Adobe / Mozilla ECMAScript) для доступа к низкоуровневым библиотекам (например, POSIX). В своем текущем состоянии он, кажется, хорош для таких вещей, как программы, подобные сценариям оболочки, и это то, что звучит как то, что вы ищете.

Попробуйте:

http://code.google.com/p/redtamarin/

2 голосов
/ 29 июня 2009

Сейчас нет способа сделать это с голым SWF.

Однако вы можете опубликовать свой Flash-контент как приложение AIR. Затем приложение может быть вызвано из командной строки, и вы можете собрать аргументы из свойства arguments InvokeEvent . Основная идея выглядит так:

NativeApplication.nativeApplication.addEventListener( 
            InvokeEvent.INVOKE, onInvoke );
// ...
function onInvoke( e:InvokeEvent ) {
    var numArguments:int = e.arguments.length;
    // ...
}

Обратите внимание, однако, что это по сути улица с односторонним движением. Вы можете получить аргументы командной строки, но Flash все еще не поддерживает идею stdin и stdout.

1 голос
/ 04 октября 2011

Теперь это возможно с AIR 2.0. Проверьте эту статью , чтобы начать.

0 голосов
/ 17 сентября 2015

У меня недавно был похожий вопрос. Мне потребовалось несколько дней, чтобы ответить на него самостоятельно, но вы можете создать .swf и выполнить его полностью из командной строки.

Файловая система AS3 Hello World

0 голосов
/ 03 июля 2009

Если вы действительно склонны к этому, вы можете открыть локальный сокет, а затем запустить вспомогательную программу, запускаемую из командной строки для связи с открытым SWF.

Это может быть хорошее время для изучения другого языка. Могу ли я предложить Java?

0 голосов
/ 29 июня 2009

Вы можете взглянуть на Haxe с очень похожим на AS3 и может скомпилировать NekoVM Байт-код, который может быть запущен в командной строке.

Также интересно может быть HippoHX , это своего рода платформа для создания настольных приложений из флэш-фильмов. (аналогично AIR, но с полным доступом к системе.)

0 голосов
/ 29 июня 2009

Нет - не возможно. Лучшее, что вы можете сделать, - это отдельное приложение (которое можно сделать во Flash или с помощью версии Flash Player для проектора, доступной на веб-сайте Adobe).

А почему вы хотите - Flash великолепен благодаря великолепным возможностям графического интерфейса. Есть много других языков программирования, которые намного лучше подходят для командной строки (Python или Ruby или, не дай бог, даже Perl)

...