Ich habe ein kleines Skript mit JXA (JavaScript for Automation) erstellt, das ein Ergebnis mit console.log
.
Scheint jedoch console.log
auf stderr auszugeben und ich möchte auf stdout ausgeben. Ich kann immer 2>&1
beim Aufruf des Skripts, aber es wäre vorzuziehen, direkt aus dem Skript auf stdout auszugeben.
Gibt es eine Möglichkeit, das zu erreichen?
Lösung gefunden: nicht verwenden console.log
oder irgendetwas anderes. Anstatt
console.log('something');
Einfach
'something';
Es wird auf stdout ausgegeben.
Es ist vielleicht nicht die schönste Lösung aller Zeiten, aber ich denke, Ihre beste Wahl ist die Verwendung der Objective-C-Skriptbrücke. Die Alternative wäre, sich direkt mit der Befehlszeile und zu befassen printf
, was wahrscheinlich noch unordentlicher wäre.
Mithilfe der Skriptbrücke können Sie console.log
eine benutzerdefinierte Funktion neu zuweisen, die stdout
mithilfe von NSFileHandle.fileHandleWithStandardOutput
. Wenn Sie diese Definition an den Anfang Ihres Programms stellen, können Sie diese überarbeitete console.log
.
console.log = function() {
ObjC.import('Foundation');
for (argument of arguments) {
$.NSFileHandle.fileHandleWithStandardOutput.writeData($.NSString.alloc.initWithString(String(argument) + "\n").dataUsingEncoding($.NSNEXTSTEPStringEncoding));
}
}
Beachten Sie, dass ich am Ende jeder Zeichenfolge einen Zeilenumbruch hinzugefügt habe. Möglicherweise möchten Sie dieses Verhalten an Ihre Anforderungen anpassen.
console.log(ObjC.unwrap(app.bundleIdentifier))
grg
mmmmmm
Benutzer137369
console.log('whatever')
. Nichts Außergewöhnliches.mmmmmm
Benutzer137369