From: "Antoine P." Date: 2012-08-21T20:56:21+09:00 Subject: Strange line feed behavior with ping command. Hello, While testing ruby to execute external commands, i'm having a strange behavior with some commands. To give an example, I have a simple script which is echoing an external command result. I observe different behavior --- 1st test : DIR command --- -code- (just a simple echo) : IO.popen("dir") do |f| while line = f.gets puts line; end end -result- same as a regular dir executed as a commandline in windows console : D:\test>d:\temp\ruby-1.9\bin\ruby.exe test_dir.rb Le volume dans le lecteur D s'appelle DONNEES Le numéro de série du volume est C083-B188 Répertoire de D:\test 21/08/2012 13:25 . 21/08/2012 13:25 .. 21/08/2012 13:22 temp 21/08/2012 13:24 84 test_dir.rb 21/08/2012 13:25 95 test_ping.rb 2 fichier(s) 179 octets 3 Rép(s) 13 118 869 504 octets libres OK it works ! --- 2nd test : PING command --- When I try to echo a simple ping localhost with the same script : -code- IO.popen("ping localhost") do |f| while line = f.gets puts line; end end -result- I have a different output with annoying added line feeds which are not visible in a regular command line : D:\test>d:\temp\ruby-1.9\bin\ruby.exe test_ping.rb Envoi d'une requête 'ping' sur PC43343 [127.0.0.1] avec 32 octets de données : Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Statistiques Ping pour 127.0.0.1: Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%), Durée approximative des boucles en millisecondes : Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms Whereas a regular command line is more compact : D:\test>ping localhost Envoi d'une requête 'ping' sur PC43343 [127.0.0.1] avec 32 octets de données : Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 Statistiques Ping pour 127.0.0.1: Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%), Durée approximative des boucles en millisecondes : Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms -analysis- : I have indeed many successive "\n" linefeeds : -code- output = IO.popen("ping localhost").readlines() print output -result- ["\n", "\n", "Envoi d'une requ\x88te 'ping' sur PC43343 [127.0.0.1] avec 32 oct ets de donn\x82es\xFF:\n", "\n", "\n", "\n", "R\x82ponse de 127.0.0.1\xFF: octet s=32 temps<1ms TTL=128\n", "\n", "R\x82ponse de 127.0.0.1\xFF: octets=32 temps<1 ms TTL=128\n", "\n", "R\x82ponse de 127.0.0.1\xFF: octets=32 temps<1ms TTL=128\n ", "\n", "R\x82ponse de 127.0.0.1\xFF: octets=32 temps<1ms TTL=128\n", "\n", "\n ", "\n", "Statistiques Ping pour 127.0.0.1:\n", "\n", " Paquets\xFF: envoy\x8 2s = 4, re\x87us = 4, perdus = 0 (perte 0%),\n", "\n", "Dur\x82e approximative d es boucles en millisecondes :\n", "\n", " Minimum = 0ms, Maximum = 0ms, Moyen ne = 0ms\n", "\n"] -notes- . i have the same behavior if i use puts or print to echo on stdout. . i have the same behavior too if i use other apis like popen2 / popen3 (i tried many things even trying to change encoding mode but with no success) . i'm using ruby 1.9 on window XP profesionnal french If you have any idea to explain such a behavior and any suggested solution, i would be grateful. Note : as i'm evaluating ruby as a scripting tool to write some system scripts which will manipulate lots of input / output of external commands, I don't want to manipulate full output or line by line to delete \n which is not a clean solution in my opinion - so solution MUST be simple and easy :-) ? thx by advance -- Posted via http://www.ruby-forum.com/.