Output JXA su stdout

5

Ho un piccolo script realizzato con JXA (JavaScript for Automation) che restituisce un risultato alla shell con console.log .

Tuttavia, console.log sembra essere in uscita su stderr e mi piacerebbe eseguire l'output su stdout. Posso sempre 2>&1 quando si chiama lo script, ma sarebbe preferibile l'output direttamente su stdout dallo script.

C'è un modo per farlo?

    
posta user137369 13.02.2017 - 00:28
fonte

2 risposte

4

Trovato la soluzione: non utilizzare console.log o altro. Invece di

console.log('something');

Semplicemente

'something';

Verrà emesso su stdout.

    
risposta data 02.04.2017 - 14:32
fonte
2

Potrebbe non essere la soluzione più carina di sempre, ma penso che la cosa migliore da fare sia utilizzare il bridge di scripting Objective-C. L'alternativa sarebbe trattare direttamente con la riga di comando e printf , che sarebbe probabilmente ancora più caotica.

Usando il bridge di scripting, puoi riassegnare console.log a una funzione personalizzata che scrive in stdout usando NSFileHandle.fileHandleWithStandardOutput . Se inserisci questa definizione nella parte superiore del tuo programma, puoi utilizzare questo console.log rivisto.

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

Tieni presente che ho aggiunto un'interruzione di riga alla fine di ogni stringa: potresti voler personalizzare questo comportamento per soddisfare le tue esigenze.

    
risposta data 10.03.2017 - 01:24
fonte

Leggi altre domande sui tag