我希望能够编写一个可以作为命令行应用程序运行的.swf文件.换句话说,我将能够创建可以与stdin和stdout交互的actionscript类,然后可以直接在命令行中执行.swf.
我怀疑这不可能.任何人都可以证实吗?
编辑: 一些答案指出,使用Flash进行命令行工作可能不是最好的选择.我在大多数情况下都完全同意.我之所以要问这个是因为我想做一些AS3代码生成,并且在运行时内反映AS3类比解析代码或走Asdoc产生的中间XML更容易.我现在正在Ruby中使用XML方法,但是希望有一个更清洁的解决方案!
是!它实际上是可能的.
您可以创建纯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的更多信息:使用AIR Debug Launcher(ADL)
此外,这将非常有用:AIR应用程序调用和终止
你可以用你一切的输出trace()
,写入文件,甚至直接写入stdout,所看到这里.
显然,有一个Tamarin 项目旨在创建一个AS3的开源实现. 此页面提供了编译AS3脚本并从命令行运行它的一些细节.
我对Tamarin的稳定性并不了解,但现在可能是你最好的选择.另一方面,我必须非常同意@zenazn你最好长期学习一种更适合一般用途的语言,但如果真的想要使用Actionscript,不要让任何人阻止你:)