有什么方法可以将ActionScript 3(Flex / AIR)项目打印到标准输出?

时间:2020-03-05 18:46:11  来源:igfitidea点击:

有什么方法可以在执行时从ActionScript 3项目打印内容编译二进制文件到stdout?

从我收集的数据来看,人们一直在通过编写依赖于本地套接字连接的hack和写入本地文件系统中文件的AIR应用程序来绕过此限制,但这几乎可以解决-Flash Player和Adobe的AIR运行时。

是否有任何项目(例如基于Tamarin代码)正在尝试实现可提供此类功能的项目?

解决方案

回答

就像我们说的那样,没有Adobe创建的方法可以执行此操作,但是Zinc可能会更好,它类似于AIR,但提供了基于Flash的应用程序的真实OS集成。看一下API文档,那里应该有东西。

回答

如果使用调试Flash Player,则可以让Flash Player将跟踪消息记录到系统上的文件。

如果我们需要实时消息,则可以拖尾文件。

更多信息:

http://blog.flexexamples.com/2007/08/26/debugging-flex-applications-with-mmcfg-and-flashlogtxt/

迈克·钱伯斯

[email protected]

回答

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

回答

使用Linux上的AIR,可以很容易地将其写入stdout,因为该进程可以将自己的文件描述符视为/ dev中的文件。

对于stdout,将/ 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()"之间的区别,后者将避免在stdout上输出乱码。