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

Apache flex 是否可以创建一个';命令行';swf?,apache-flex,flash,actionscript-3,actionscript,Apache Flex,Flash,Actionscript 3,Actionscript,我希望能够编写一个可以作为命令行应用程序运行的.swf文件。换句话说,我将能够创建actionscript类,这些类可以与stdin和stdout交互,然后可以直接在命令行中执行该.swf 我怀疑这是不可能的。有人能证实吗 编辑: 有几个答案指出,在命令行工作中使用Flash可能不是最佳选择。我完全同意大多数情况。我之所以问这个问题,是因为我想生成一些AS3代码,在运行时内思考AS3类比解析代码或遍历asdoc生成的中间XML更容易。我现在正在Ruby中使用XML方法,但希望有一个更干净的解决方

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

我怀疑这是不可能的。有人能证实吗

编辑: 有几个答案指出,在命令行工作中使用Flash可能不是最佳选择。我完全同意大多数情况。我之所以问这个问题,是因为我想生成一些AS3代码,在运行时内思考AS3类比解析代码或遍历asdoc生成的中间XML更容易。我现在正在Ruby中使用XML方法,但希望有一个更干净的解决方案

不,不可能。你能做的最好的是一个独立的应用程序(可以用Flash制作,也可以用投影仪版本的Flash player制作,可以从Adobe网站上获得)

你为什么要这么做呢?Flash是很棒的,因为它有强大的GUI功能。还有很多其他编程语言更适合命令行(Python或Ruby,或者,天哪,甚至Perl)

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


我不知道塔玛林有多稳定,但这可能是你目前最好的选择。另一方面,我非常同意@zenazn的观点,你最好长期学习一种更为通用的语言,但如果你真的想使用Actionscript,不要让任何人阻止你:)

现在用一个简单的SWF是无法做到这一点的

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

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

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


同样有趣的是,它是一种用flash电影创建桌面应用程序的框架。(与AIR类似,但可以完全访问系统。)

如果您真的这么想,您可以打开一个本地套接字,然后让一个助手程序从命令行运行,并与打开的SWF通信


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

事实上,有一个项目使它成为可能。RedTamarin是一个扩展AS3(技术上是Tamarin项目,即Adobe/Mozilla ECMAScript项目)以访问低级库(即POSIX)的项目。在它目前的状态下,它似乎适合于像shell脚本这样的程序,这听起来就像是你正在寻找的东西

试一试:


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

是!这实际上是可能的。

您可以创建一个纯AS3 AIR项目(没有任何应用程序窗口),并使用ADL(AIR调试启动器)从命令行运行

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的更多信息:

此外,这将非常有用:


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

您可以使用redtamarin与标准输入、标准输出和标准输出进行交互

请参见此处的示例/文档

Flash和ActionScript 3之间存在差异 Flash是一种运行时,AS3是一种语言

我不明白为什么AS3不是一种好的编程语言 用于命令行和/或服务器端

现在,redtamarin只是一个运行时,它允许您 在命令行上运行AS3源代码

此外,根据您的需要,您可以以不同的方式使用它

  • 在命令行上运行脚本

    $./redshell myscript.as

  • 在命令行上运行ABC或SWF文件

    $./redshell myscript.abc

    $./redshell myscript.swf

  • 运行一个可执行的

    $./myscript

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

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

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

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

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


    谢谢您的回复。我给我的问题添加了一个解释,解释为什么我想在命令行上使用as3。这个答案并不完全正确,有几种方法可以通过