是否可以创建一个'命令行'swf?

Pet*_*son 12 apache-flex flash actionscript actionscript-3

我希望能够编写一个可以作为命令行应用程序运行的.swf文件.换句话说,我将能够创建可以与stdin和stdout交互的actionscript类,然后可以直接在命令行中执行.swf.

我怀疑这不可能.任何人都可以证实吗?

编辑: 一些答案指出,使用Flash进行命令行工作可能不是最好的选择.我在大多数情况下都完全同意.我之所以要问这个是因为我想做一些AS3代码生成,并且在运行时内反映AS3类比解析代码或走Asdoc产生的中间XML更容易.我现在正在Ruby中使用XML方法,但是希望有一个更清洁的解决方案!

Pet*_*ter 23

是!它实际上可能的.

您可以创建纯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); 
         } 
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

您的主类仍将​​扩展Sprite,但除非您创建NativeWindow对象,否则您将看不到任何UI .如果您正在使用Flash Builder,只需创建一个新的AIR项目并将主.mxml文件的扩展名重命名为.as(在完成向导之前).

以下是有关ADL的更多信息:使用AIR Debug Launcher(ADL)

此外,这将非常有用:AIR应用程序调用和终止

你可以用你一切的输出trace(),写入文件,甚至直接写入stdout,所看到这里.


Mar*_*off 8

显然,有一个Tamarin 项目旨在创建一个AS3的开源实现. 此页面提供了编译AS3脚本并从命令行运行它的一些细节.

我对Tamarin的稳定性并不了解,但现在可能是你最好的选择.另一方面,我必须非常同意@zenazn你最好长期学习一种更适合一般用途的语言,但如果真的想要使用Actionscript,不要让任何人阻止你:)


zen*_*azn -6

不——不可能。您能做的最好的事情就是制作一个独立的应用程序(可以用 Flash 制作,也可以使用 Flash 播放器的投影仪版本制作,可从 Adob​​e 网站获取)。

为什么您会想要——Flash 非常棒,因为它具有强大的 GUI 功能。还有许多其他更适合命令行的编程语言(Python 或 Ruby,或者,上帝保佑,甚至是 Perl)