Węzeł.js: drukowanie na konsoli Bez kończącego się znaku nowego wiersza?
Czy istnieje metoda drukowania na konsoli bez końcowego znaku nowego wiersza? Dokumentacja console
obiektu nie mówi nic na ten temat:
console.log()
Drukuje na stdout z nowym wierszem. Funkcja ta może przyjmować wiele argumentów w sposób podobny do
printf()
. Przykład:console.log('count: %d', count);
Jeśli elementy formatujące nie znajdują się w pierwszym łańcuchu, to
util.inspect
jest używane dla każdego argumentu.
8 answers
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-30 20:15:45
Ponadto, jeśli chcesz nadpisać wiadomości w tej samej linii, na przykład w odliczaniu, możesz dodać '\r' na końcu łańcucha.
process.stdout.write("Downloading " + data.length + " bytes\r");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-09 04:26:57
W konsoli Windows (również Linux), należy zastąpić '\r' równoważnym kodem \033[0G :
process.stdout.write('ok\033[0G');
Wykorzystuje sekwencję ucieczki terminala VT220 do wysłania kursora do pierwszej kolumny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-15 03:12:00
Util.można również użyć print . Powinno być: http://nodejs.org/api/util.html#util_util_print
Util.print ([...])# Funkcja synchronicznego wyjścia. Zablokuje proces, rzuci każdy argument na łańcuch znaków, a następnie wyjdzie na standardowe wyjście. Nie umieszcza nowych linii po każdym argumencie.
Przykład:
// get total length
var len = parseInt(response.headers['content-length'], 10);
var cur = 0;
// handle the response
response.on('data', function(chunk) {
cur += chunk.length;
util.print("Downloading " + (100.0 * cur / len).toFixed(2) + "% " + cur + " bytes\r");
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 13:02:43
Wydaje się być wiele odpowiedzi sugerujących process.stdout.write
. Dzienniki błędów powinny być emitowane na process.stderr
zamiast (Użyj console.error
). Dla każdego, kto zastanawia się, dlaczego proces.stdout.write ('\033[0g'); nic nie robi to dlatego, że stdout jest buforowany i trzeba czekać na zdarzenie drain
(Patrz Stdout flush dla NodeJS?). Jeśli write zwróci false, uruchomi Zdarzenie drain
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37
Jako rozszerzenie / ulepszenie genialnego dodatku zrobionego przez @ rodowi powyżej, dotyczącego możliwości nadpisania wiersza:
process.stdout.write("Downloading " + data.length + " bytes\r");
Jeśli nie chcesz, aby kursor terminala znajdował się przy pierwszym znaku, jak widziałem w moim kodzie, rozważ wykonanie następujących czynności:
let dots = ''
process.stdout.write(`Loading `)
let tmrID = setInterval(() => {
dots += '.'
process.stdout.write(`\rLoading ${dots}`)
}, 1000)
setTimeout(() => {
clearInterval(tmrID)
console.log(`\rLoaded in [3500 ms]`)
}, 3500)
Poprzez umieszczenie \r
przed następną instrukcją print kursor jest resetowany tuż przed zastąpieniem poprzedniego ciągu znaków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 00:33:06
Żadne z tych rozwiązań nie działa dla mnie. proces.stdout.write ('ok\033[0g') and just using '\r ' just create a new line, do not overrite, Mac OSX 10.9.2
EDIT: musiałem użyć tego, aby zastąpić bieżącą linię
Proces.stdout.write ("\033[0g"); proces.stdout.write ('newstuff');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-04 18:44:51
Wystąpił błąd podczas używania trybu ścisłego.
Błąd węzła: "literały ósemkowe nie są dozwolone w trybie ścisłym."
Znalazłem odpowiedź tutaj: https://github.com/SBoudrias/Inquirer.js/issues/111
Proces.stdout.write ("received:" + bytesReceived + "\x1b[0g");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-30 08:48:47