我希望能够编写一个可以作为命令行应用程序运行的.swf文件。换句话说,我将能够创建可以与stdin和stdout交互的actionscript类,然后可以直接在命令行中执行.swf。
我怀疑这不太可能。任何人都可以确认吗?
修改 一些答案指出,使用Flash进行命令行工作可能不是最好的选择。我在大多数情况下都完全同意。我之所以要问这个是因为我想做一些AS3代码生成,并且在运行时内反映AS3类比解析代码或走Asdoc产生的中间XML更容易。我现在正在Ruby中使用XML方法,但是希望有一个更清洁的解决方案!
答案 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应用。然后可以从命令行调用该应用程序,您可以从arguments的InvokeEvent属性中收集参数。基本思想如下:
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脚本的程序来说似乎很有用,这听起来就像你正在寻找的那样。
试一试:
答案 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源代码。
另外,根据您的需要,您可以以不同的方式使用它
在命令行上运行脚本
$ ./redshell myscript.as
在命令行上运行ABC或SWF文件
$ ./redshell myscript.abc
$ ./redshell myscript.swf
运行exectuable
$ ./myscript
当您运行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并完全从命令行执行它。
答案 9 :(得分:-5)
不 - 不可能。您可以做的最好的是一个独立的应用程序(可以在Flash中制作,也可以使用Adobe网站上提供的Flash播放器的投影仪版本制作)。
为什么你想要 - 由于出色的GUI功能,Flash很棒。还有很多其他编程语言更适合命令行(Python或Ruby,或者上帝禁止,甚至是Perl)