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

时间:2009-06-28 23:41:08

标签: flex flash actionscript-3 actionscript

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

我怀疑这不太可能。任何人都可以确认吗?

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

10 个答案:

答案 0 :(得分: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); 
         } 
      }
   }
}

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

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

此外,这将非常有用:AIR application invocation and termination

您可以使用trace()完成所有输出,写入文件,甚至直接写入stdout,如here所示。

答案 1 :(得分:8)

显然有Tamarin项目旨在创建AS3的开源实现。 This page提供了编译AS3脚本并从命令行运行它的一些细节。

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

答案 2 :(得分:2)

现在无法使用裸SWF进行此操作。

但是,您可以将Flash内容发布为AIR应用。然后可以从命令行调用该应用程序,您可以从argumentsInvokeEvent属性中收集参数。基本思想如下:

NativeApplication.nativeApplication.addEventListener( 
            InvokeEvent.INVOKE, onInvoke );
// ...
function onInvoke( e:InvokeEvent ) {
    var numArguments:int = e.arguments.length;
    // ...
}
但是,请注意,这基本上是一条单行道。您可以获取命令行参数,但Flash仍然没有理解stdin和stdout。

答案 3 :(得分:2)

实际上,有一个项目可以实现。 RedTamarin是一个扩展AS3(技术上是Tamarin项目,即Adobe / Mozilla ECMAScript项目)的项目,可以访问低级库(即POSIX)。在目前的状态下,对于类似shell脚本的程序来说似乎很有用,这听起来就像你正在寻找的那样。

试一试:

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

答案 4 :(得分:2)

您可以使用redtamarin

与stdin,stdout和stderr进行交互

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. 运行exectuable

    $ ./myscript

  4. 当您运行AS3脚本时,它将被动态解释, 使用ASC,您将能够将此相同的脚本编译为ABC文件 也可以从命令行运行。

    例如,如果您需要将多个ABC文件组合在一起, 您可以使用 swfmake 将它们合并到SWF文件和运行时中 也将从命令行运行该SWF文件。

    最后,如果您需要将所有内容捆绑在一个可执行文件中, 您可以使用 createprojector 来获取ABC或SWF文件 并将其与运行时本身合并以获得独立的 可执行文件。

    Redtamarin提供涵盖文件系统访问的本机API, 套接字,操作系统信息等。

答案 5 :(得分:1)

现在可以使用AIR 2.0。检查this article以开始。

答案 6 :(得分:0)

您可以查看Haxe,它与AS3非常相似,可以编译NekoVM字节码,可以在命令行上运行。

同样有趣的可能是HippoHX,它是一种用Flash电影创建桌面应用程序的框架。 (类似于AIR,但具有对系统的完全访问权限。)

答案 7 :(得分:0)

如果你真的那么倾向,你可以打开一个本地套接字,然后有一个帮助程序,从命令行运行与打开的SWF通信。

这可能是学习另一种语言的好时机。我可以建议Java吗?

答案 8 :(得分:0)

我最近有一个类似的问题。我花了几天时间自己回答它,但你可以创建一个.swf并完全从命令行执行它。

AS3 Filesystem Hello World

答案 9 :(得分:-5)

不 - 不可能。您可以做的最好的是一个独立的应用程序(可以在Flash中制作,也可以使用Adobe网站上提供的Flash播放器的投影仪版本制作)。

为什么你想要 - 由于出色的GUI功能,Flash很棒。还有很多其他编程语言更适合命令行(Python或Ruby,或者上帝禁止,甚至是Perl)