8 votes

Sortie JXA vers stdout

J'ai un petit script fait avec JXA (JavaScript for Automation) qui produit un résultat dans le shell avec console.log .

Cependant, console.log semble sortir sur stderr et j'aimerais sortir sur stdout. Je peux toujours 2>&1 lors de l'appel au script, mais il serait préférable de sortir directement sur stdout à partir du script.

Existe-t-il un moyen d'y parvenir ?

6voto

user137369 Points 1404

J'ai trouvé la solution : ne pas utiliser console.log ou autre. Au lieu de

console.log('something');

Simplement

'something';

Il sera affiché sur la sortie standard (stdout).

4voto

aaplmath Points 2850

Ce n'est peut-être pas la solution la plus jolie qui soit, mais je pense que la meilleure solution est d'utiliser le pont de scriptage Objective-C. L'autre solution consisterait à utiliser directement la ligne de commande et la commande printf ce qui serait probablement encore plus désordonné.

À l'aide de la passerelle de script, vous pouvez réaffecter console.log à une fonction personnalisée qui écrit dans stdout en utilisant NSFileHandle.fileHandleWithStandardOutput . Si vous placez cette définition au début de votre programme, vous pouvez alors utiliser cette révision console.log .

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

Notez que j'ai ajouté un saut de ligne à la fin de chaque chaîne de caractères - vous pouvez adapter ce comportement à vos besoins.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X