有没有办法让从 ActionScript 3 项目编译的二进制文件在执行时打印到标准输出?
从我收集到的信息来看,人们一直在通过编写依赖本地套接字连接的 hack 和写入本地文件系统中文件的 AIR 应用程序来绕过这个限制,但仅此而已 - 显然 Flash Player 不可能Adobe 的 AIR 运行时。
是否有任何项目(例如基于 Tamarin 代码)试图实现提供这种功能的东西?
有没有办法让从 ActionScript 3 项目编译的二进制文件在执行时打印到标准输出?
从我收集到的信息来看,人们一直在通过编写依赖本地套接字连接的 hack 和写入本地文件系统中文件的 AIR 应用程序来绕过这个限制,但仅此而已 - 显然 Flash Player 不可能Adobe 的 AIR 运行时。
是否有任何项目(例如基于 Tamarin 代码)试图实现提供这种功能的东西?
使用 Linux 上的 AIR,写入标准输出很容易,因为进程可以将自己的文件描述符视为 /dev 中的文件。
对于标准输出,打开/dev/fd/1
或/dev/stdout
作为一个FileStream
,然后写入。
例子:
var stdout : FileStream = new FileStream();
stdout.open(new File("/dev/fd/1"), FileMode.WRITE);
stdout.writeUTFBytes("test\n");
stdout.close();
注意:请参阅此答案writeUTF()
以了解和之间的区别writeUTFBytes()
- 后者将避免标准输出上的乱码输出。
如果您使用的是调试 Flash Player,则可以让 Flash Player 将跟踪消息记录到系统上的文件中。
如果您想要实时消息,那么您可以跟踪文件。
更多信息:
http://blog.flexexamples.com/2007/08/26/debugging-flex-applications-with-mmcfg-and-flashlogtxt/
迈克室
网格@adobe.com
Redtamarin似乎能够做到这一点(即使它仍处于起步阶段):
内容test.as
:
import avmplus.System;
import redtamarin.version;
trace( "hello world" );
trace( "avmplus v" + System.getAvmplusVersion() );
trace( "redtamarin v" + redtamarin.version );
在命令行上:
$ ./buildEXE.sh test.as
test.abc, 243 bytes written
test.exe, 2191963 bytes written
test.abc, 243 bytes written
test.exe, 2178811 bytes written
$ ./test
hello world
avmplus v1.0 cyclone (redshell)
redtamarin v0.1.0.92