2008-09-02 11 views
7

¿Hay alguna manera de tener un código binario compilado de un proyecto de ActionScript 3 para imprimir stdout cuando se ejecuta?¿Hay alguna manera de imprimir un proyecto de ActionScript 3 (Flex/AIR) a la salida estándar?

Por lo que he reunido, las personas han eludido esta limitación escribiendo hacks que dependen de conexiones de socket locales y aplicaciones de AIR que escriben en archivos en el sistema de archivos local, pero eso es todo, obviamente no es posible con los tiempos de ejecución de Flash Player y AIR de Adobe.

¿Hay algún proyecto (por ejemplo, basado en el código Tamarin) que esté intentando implementar algo que proporcione este tipo de funcionalidad?

Respuesta

9

Con AIR en Linux, es fácil escribir en la salida estándar, ya que el proceso puede ver sus propios descriptores de archivos como archivos en/dev.

Para stdout, abra /dev/fd/1 o /dev/stdout como FileStream, luego escriba a eso.

Ejemplo:

var stdout : FileStream = new FileStream(); 
stdout.open(new File("/dev/fd/1"), FileMode.WRITE); 
stdout.writeUTFBytes("test\n"); 
stdout.close(); 

Nota: Ver this answer por la diferencia entre writeUTF() y writeUTFBytes() - este último evitar resultado ilegible en stdout.

2

Como dices, no hay una forma creada por Adobe para hacerlo, pero puedes tener mejor suerte con Zinc, es similar a AIR pero proporciona una integración real del sistema operativo de las aplicaciones basadas en Flash. Mira aunque el API docs, debería haber algo allí.

1

Redtamarin parece ser capaz de hacer esto (aunque es todavía en su infancia):

Contenido de test.as:

import avmplus.System; 
import redtamarin.version; 

trace("hello world"); 
trace("avmplus v" + System.getAvmplusVersion()); 
trace("redtamarin v" + redtamarin.version); 

En la línea de comandos:

$ ./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 
Cuestiones relacionadas