Возможно ли создать "командную строку" swf?
Я бы хотел написать файл .swf, который можно запустить как приложение с командной строкой. Другими словами, я мог бы создавать классы ActionScript, которые могут взаимодействовать с stdin и stdout, а затем могли бы выполнить этот .swf непосредственно в командной строке.
Я подозреваю, что это действительно невозможно. Может ли кто-нибудь подтвердить это?
EDIT:
Несколько ответов отметили, что использование Flash для работы в командной строке, вероятно, не самый лучший выбор. В большинстве случаев я полностью согласен. Причина, по которой я спрашиваю об этом, заключается в том, что я хочу генерировать код AS3, и размышлять над классами AS3 во время выполнения было бы проще, чем разбор кода или хождение по промежуточному XML, который производит asdoc. Теперь я использую XML-подход в Ruby, но хотел бы иметь более чистое решение!
Ответы
Ответ 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 в командной строке.
Кроме того, в зависимости от ваших потребностей вы можете использовать его разными способами.
Когда вы запустите 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