Schrift
[thread]7334[/thread]

print ohne /n geht nicht

Leser: 1


<< >> 7 Einträge, 1 Seite
KunoKugel
 2005-10-12 12:35
#58668 #58668
User since
2005-10-11
19 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

ich habe hier ein Script, dass eine Liste von Rechnern durchgeht und übers Netz Informationen abfragt. Das funktioniert auch einwandfrei.

Da die Liste der Rechner aber sehr lang ist und die Bearbeitung ggf. ein paar Stunden dauern kann, habe ich eine kleine Statusmeldung eingebaut, die über einen Kommandozeilenparameter aktiviert werden kann. Es wird immer der Name des Rechners, die laufende Nummer und die Gesamtzahl der Rechner angezeigt.

Code: (dl )
    if ($verbose==1) {print "Bearbeite $client: Nummer $counter von $anzahlclients\n"}

Auch das funktioniert. Da aber für jeden Rechner eine Zeile ausgegeben wird, sieht es ein bisschen unprofessionell aus und die Konsole wird zugemüllt.

Daher wollte ich die Ausgabe so umstellen, dass immer in die selbe Zeile geschrieben wird. Ich wollte dies mit \r oder \b realisieren. Sobald ich aber das \n aus o.a. Code entferne, wird gar nichts mehr ausgegeben. Das Script läuft aber und ich sehe auch keine Fehlermeldung.

Was mache ich denn da falsch?

Bis dann.

Kuno
murphy
 2005-10-12 13:02
#58669 #58669
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Es könnte an der Zeilenpufferung der Standardausgabe liegen. Versuche mal
Code: (dl )
select STDOUT; $| = 1;
oder auch
Code: (dl )
STDOUT->autoflush(1);
vor dem Programmteil, der die Ausgabe erzeugen soll.

(edit: alternativer codeschnipsel)\n\n

<!--EDIT|murphy|1129107862-->
When C++ is your hammer, every problem looks like your thumb.
KunoKugel
 2005-10-12 13:31
#58670 #58670
User since
2005-10-11
19 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Quote
Es könnte an der Zeilenpufferung der Standardausgabe liegen. Versuche mal
Code: (dl )
select STDOUT; $| = 1;
oder auch
Code: (dl )
STDOUT->autoflush(1);
vor dem Programmteil, der die Ausgabe erzeugen soll.

(edit: alternativer codeschnipsel)


ja, das hat geklappt. :)

Da wäre ich ja wieder gar nicht drauf gekommen. Vielen Dank!

Kuno

edit: Überflüsiges Doppelquote entfernt\n\n

<!--EDIT|KunoKugel|1129111536-->
sri
 2005-10-12 15:59
#58671 #58671
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=murphy,12.10.2005, 11:02]
Code: (dl )
select STDOUT; $| = 1;

[/quote]
Falsch.
[quote=murphy,12.10.2005, 11:02]
Code: (dl )
STDOUT->autoflush(1);
[/quote]
Richtig.
murphy
 2005-10-12 16:44
#58672 #58672
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sri,12.10.2005, 13:59][quote=murphy,12.10.2005, 11:02]
Code: (dl )
select STDOUT; $| = 1;

[/quote]
Falsch.
[...][/quote]
Ich bin ja nun selbst nicht der größte Perl Experte, daher hätte ich gerne eine Erklärung, warum das "falsch" ist.

Mir ist klar, dass es nicht völlig sauber ist, da es außer dem Einschalten des Autoflushmodus auf STDOUT noch den Nebeneffekt hat, STDOUT als Standardausgabeziel festzulegen, aber ist da sonst noch etwas schlecht daran?
When C++ is your hammer, every problem looks like your thumb.
master
 2005-10-12 19:37
#58673 #58673
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
.................$anzahlclients\n"}

Du hast das Semikolon vegessen... -> ;
Code: (dl )
if ($verbose==1) {print "Bearbeite $client: Nummer $counter von $anzahlclients\n";}
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Strat
 2005-10-12 19:57
#58674 #58674
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=master,12.10.2005, 17:37]
Code: (dl )
.................$anzahlclients\n"}

Du hast das Semikolon vegessen... -> ;
Code: (dl )
if ($verbose==1) {print "Bearbeite $client: Nummer $counter von $anzahlclients\n";}
[/quote]
da alles in einer zeile steht und das semikolon vor einer schliessenden geschwungenen klammer optional ist, wuerde ich es hier wahrscheinlich auch weglassen (wird so auch in perlstyle empfohlen); besser gefaellt mir jedoch:
Code: (dl )
print "Bearbeite $client: Nummer $counter von $anzahlclients\n" if $verbose;

oder ... if $verbose == 1;\n\n

<!--EDIT|Strat|1129132741-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 7 Einträge, 1 Seite



View all threads created 2005-10-12 12:35.