2009-06-28 23 views
12

Me gustaría poder escribir un archivo .swf ejecutable como una aplicación de línea de comandos. En otras palabras, podría crear clases actionscript que pueden interactuar con stdin y stdout, y luego podría ejecutar ese .swf directamente en la línea de comandos.¿Es posible crear un swf de 'línea de comando'?

Sospecho que esto no es realmente posible. ¿Alguien puede confirmar eso?

EDIT: Un par de las respuestas indicaron que usar Flash para el trabajo de línea de comandos probablemente no sea la mejor opción. De todo corazón estoy de acuerdo en la mayoría de las situaciones. La razón por la que estoy preguntando sobre esto es porque quiero hacer algo de generación de código AS3, y sería más fácil reflexionar sobre las clases AS3 dentro del tiempo de ejecución que analizar el código o recorrer el XML intermediario que produce el asdoc. Estoy haciendo el enfoque XML ahora en Ruby, ¡pero me encantaría tener una solución más limpia!

+1

Si se ahorraría una gran cantidad de esfuerzo para poner su lógica en AS3, podría valer la pena martillar un puente en Rubí (o lo que sea) entre la entrada estándar/salida estándar y una conexión de socket con un flash o AIR aplicación Ruby podría, por ejemplo, invocar una aplicación de AIR con un puerto como argumento, esperar una conexión y luego comenzar a conectar ambas direcciones. El lado AS3 funcionaría como usted lo describe, si pretende que su Socket/XMLSocket es una tubería para stdin/out. – fenomas

+0

¡Ohhh, ahora ese es un enfoque interesante !. Anoche estaba leyendo sobre un cliente de amqp en as3. Podría ser que rabbitMQ o similar al mensaje de intermediario que pasa entre un controlador de ruby ​​y un swf as3 que estaba tirando del código. –

+0

He hecho algo razonablemente similar con Java para evitar la incapacidad de AIR para escuchar las conexiones entrantes. Usé xsocket en Java y XMLSocket en el lado de la memoria flash y no había mucho para eso. En el lado de Java estaba conectando a un puerto TCPIP, en lugar de stdout/in, pero supongo que no es muy diferente. – fenomas

Respuesta

-5

Nope - no es posible. Lo mejor que puedes hacer es una aplicación independiente (que se puede hacer en Flash o con una versión de Proyector de Flash Player, disponible en el sitio web de Adobe).

Y por qué querrías - Flash es increíble debido a las excelentes capacidades de la GUI. Hay muchos otros lenguajes de programación que son mucho más adecuados para la línea de comando (Python o Ruby o, Dios no lo quiera, incluso Perl)

+1

gracias por la respuesta. Agregué una explicación a mi pregunta sobre por qué quería usar as3 en la línea de comando. –

+0

Esta respuesta no es del todo correcta, hay formas en que se puede ejecutar un archivo SWF a través de la línea de comandos * *. – Peter

8

Aparentemente existe el proyecto Tamarin que tiene como objetivo crear una implementación de código abierto de AS3. This page da un pequeño detalle de cómo compilar un script AS3 y ejecutarlo desde una línea de comando.

No me estoy haciendo una buena idea de lo estable que es Tamarin, pero podría ser su mejor apuesta por el momento. Por otro lado, tengo que estar muy de acuerdo con @zenazn en que sería mejor que aprendieras a largo plazo un lenguaje más diseñado para propósitos generales, pero si realmente quieres usar Actionscript, no dejes que nadie te detenga:)

+0

Tamarin ES la máquina virtual AVM2 que ejecuta código de operación de ActionScript compilado (ABC, o código de byte Actionscript) dentro de Flash Player 9+. Adobe ha donado este VM a la fundación Mozilla con la esperanza de que lo integre con FireFox para JIT compilar (Just In Time) Javascript para ABC para una ejecución mucho más rápida dentro del navegador. Similar a lo que Google está haciendo con Chrome/Chromium. – Luke

+0

Tamarin ahora está obsoleto/desaparecido. –

2

No hay forma de hacer esto con un SWF desnudo ahora mismo.

Sin embargo, puede publicar su contenido de Flash como una aplicación de AIR. La aplicación puede invocarse desde la línea de comandos y puede recopilar los argumentos de la propiedad arguments de InvokeEvent. La idea básica es similar a la siguiente:

NativeApplication.nativeApplication.addEventListener( 
      InvokeEvent.INVOKE, onInvoke); 
// ... 
function onInvoke(e:InvokeEvent) { 
    var numArguments:int = e.arguments.length; 
    // ... 
} 

Tenga en cuenta, sin embargo, que se trata básicamente de una calle de sentido único. Puede tomar los argumentos de la línea de comandos, pero Flash todavía no asimila la idea de stdin y stdout.

0

usted podría tener un vistazo a haXe con es muy similar a AS3 y podrían recopilar NekoVM código de bytes, lo que podría ser ejecutado en la línea de comandos.

También podría ser interesante HippoHX, es un tipo de marco para crear aplicaciones de escritorio de películas flash. (similar a AIR, pero con acceso completo al sistema.)

0

Si realmente está inclinado, podría abrir un socket local, y luego tener un programa de ayuda, ejecutando desde la línea de comando comunicarse con el SWF abierto .

Este podría ser un buen momento para aprender otro idioma. ¿Puedo sugerir Java?

2

En realidad, hay un proyecto que lo hace posible.RedTamarin es un proyecto que extiende AS3 (técnicamente, el proyecto Tamarin que es el proyecto Adobe/Mozilla ECMAScript) para tener acceso a bibliotecas de bajo nivel (es decir, POSIX). En su estado actual, parece ser bueno para cosas como los programas tipo "shell-scripting", que es lo que parece ser lo que estás buscando.

darle una oportunidad:

http://code.google.com/p/redtamarin/

1

Ahora es posible con AIR 2.0. Compruebe this article para comenzar.

23

YES! En realidad, es posible.

Puede crear un proyecto puro de AS3 AIR (sin ventana de aplicación) y ejecutarlo desde la línea de comandos utilizando ADL (AIR Debug Launcher).

ADL ejecutará su archivo SWF y pasará los argumentos que le proporcione directamente a su aplicación en tiempo de ejecución, ¡todo desde la línea de comandos! Para leer los argumentos de AS3 sólo tiene que añadir este código a su clase principal:

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); 
     } 
     } 
    } 
} 

su clase principal todavía se extenderá Sprite, pero no verá ninguna interfaz de usuario a menos que cree NativeWindow objetos. Si está utilizando Flash Builder, simplemente cree un nuevo proyecto de AIR y cambie el nombre de la extensión del archivo principal .mxml al .as (antes de finalizar el asistente).

Aquí es más sobre ADL: Using the AIR Debug Launcher (ADL)

Además, esto será muy útil: AIR application invocation and termination

se puede hacer todo a su salida mediante trace(), escribir archivos, o incluso escribir directamente a la salida estándar, como se ve here .

2

Puede interactuar con stdin, stdout y stderr con redtamarin

http://code.google.com/p/redtamarin/

ver ejemplos/docs aquí

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

hay una diferencia entre Flash y ActionScript 3 Flash es un tiempo de ejecución, AS3 es un lenguaje

no veo por qué AS3 no sería un buen lenguaje de programación para la línea de comandos y/o del lado del servidor

Ahora, redtamarin es solo eso, un tiempo de ejecución que le permite ejecutar su código fuente AS3 en la línea de comandos.

También, dependiendo de sus necesidades, puede utilizar de diferentes maneras

  1. para ejecutar secuencias de comandos en la línea de comandos

    $ ./redshell myscript.as

  2. ABC plazo o archivos SWF en la línea de comando

    $ ./redshell myscript.abc

    $ ./redshell myscript.swf

  3. plazo un exectuable

    $ ./myscript

Cuando va a ejecutar un script de AS3 será interpretado de forma dinámica, utilizando ASC se quiere ser capaz de compilar este mismo script en un archivo ABC que también se puede ejecutar desde la línea de comandos.

Si por ejemplo se necesita para montar numerosos archivos ABC juntos, puede utilizar swfmake para fundirlas en el archivo SWF y el tiempo de ejecución se ejecutará ese archivo SWF también desde la línea de comandos.

Por último, si usted necesita para empaquetar todo en un solo ejecutable, puede utilizar createprojector tomar su archivo SWF ABC o y fusionarlo con el mismo tiempo de ejecución para obtener una ejecutable independiente.

Redtamarin proporcionar API nativa que cubra el acceso a archivos del sistema, sockets, información del sistema operativo, etc.

0

que tenía una pregunta similar recientemente. Me tomó algunos días responderlo por mí mismo, pero puedes crear un .swf y ejecutarlo completamente desde la línea de comandos.

AS3 Filesystem Hello World

Cuestiones relacionadas