Salida JXA a la salida estándar

4

Tengo un pequeño script hecho con JXA (JavaScript para automatización) que genera un resultado en el shell con console.log .

Sin embargo, console.log parece dar salida a stderr y me gustaría enviar a stdout. Siempre puedo 2>&1 al llamar al script, pero sería preferible enviar directamente a la salida estándar desde el script.

¿Hay una manera de lograr eso?

    
pregunta user137369 13.02.2017 - 00:28

2 respuestas

3

Encontró la solución: no use console.log o cualquier otra cosa. En lugar de

console.log('something');

Simplemente

'something';

Se enviará a la salida estándar.

    
respondido por el user137369 02.04.2017 - 14:32
2

Puede que no sea la solución más bonita, pero creo que lo mejor es usar el puente de scripting de Objective-C. La alternativa sería tratar directamente con la línea de comandos y printf , lo que probablemente sería aún más complicado.

Al usar el puente de secuencias de comandos, puede reasignar console.log a una función personalizada que escribe en stdout usando NSFileHandle.fileHandleWithStandardOutput . Si coloca esta definición en la parte superior de su programa, puede usar este console.log revisado.

console.log = function() {
    ObjC.import('Foundation');
    for (argument of arguments) {
        $.NSFileHandle.fileHandleWithStandardOutput.writeData($.NSString.alloc.initWithString(String(argument) + "\n").dataUsingEncoding($.NSNEXTSTEPStringEncoding));
    }
}

Tenga en cuenta que he agregado un salto de línea al final de cada cadena; es posible que desee personalizar este comportamiento para satisfacer sus necesidades.

    
respondido por el aaplmath 10.03.2017 - 01:24

Lea otras preguntas en las etiquetas