Подтвердить что ты не робот

Возможно ли создать "командную строку" swf?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

ДА! Это действительно возможно.

Вы можете создать чистый проект 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(), записывать файлы или даже писать непосредственно в stdout, как показано здесь.

Ответ 3

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

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

Ответ 4

Нет никакого способа сделать это с открытым SWF прямо сейчас.

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

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

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

Ответ 5

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

Попробуйте:

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

Ответ 6

Вы можете взаимодействовать с 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 в командной строке.

Кроме того, в зависимости от ваших потребностей вы можете использовать его разными способами.

  • для запуска script в командной строке

    $./redshell myscript.as

  • запускать ABC или SWF файлы в командной строке

    $./redshell myscript.abc

    $./redshell myscript.swf

  • запустить exectuable

    $./myscript

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

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

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