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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以创建一个'命令行'swf?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

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

另一答案

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

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

另一答案

是!它实际上是可能的。

您可以创建纯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所示。

另一答案

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

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

另一答案

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

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

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

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

另一答案

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

试试看:

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

另一答案

您可以使用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,涵盖文件系统访问,套接字,操作系统信息等。

另一答案

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

另一答案

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

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

另一答案

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

AS3 Filesystem Hello World

以上是关于是否可以创建一个'命令行'swf?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确加载多个外部 swf 文件?

是否可以从命令行创建网站应用程序发布配置文件?

是否可以从命令行发布 FLA?

PHP判断是否命令行运行的最好办法

是否可以在没有原始 .fla 的情况下从 documentClass 文件 (.as) 生成 SWF?

Powershell 如何判断一个用户是否在一个用户组里面