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

问题描述 投票:12回答:10

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

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

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

flex flash actionscript-3 actionscript
10个回答
-5
投票

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

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


0
投票

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

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


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所示。


8
投票

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

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


2
投票

现在没有办法用裸SWF做到这一点。

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

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

但请注意,这基本上是一条单行道。你可以获取命令行参数,但Flash仍然没有理解stdin和stdout的想法。


2
投票

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

试试看:

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


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. 运行可执行文件 $ ./script

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

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

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

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


1
投票

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


0
投票

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

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


0
投票

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

AS3 Filesystem Hello World

© www.soinside.com 2019 - 2024. All rights reserved.