'time'-Kommando der bash: sys+user Zeit in Datei umleiten ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
HotblackDesiato
Beiträge: 203
Registriert: 12.08.2004 16:26:56

'time'-Kommando der bash: sys+user Zeit in Datei umleiten ?

Beitrag von HotblackDesiato » 13.07.2005 06:51:40

Hallo allerseits,

ich nehme zurzeit an einem Programmierwettbewerb teil (http://www.dinsights.com/POTM). U.a. ist eine Nebenbedingung, dass das Programm nicht mehr als 60 Sekunden sys+user-Zeit benötigt. Die tatsächlich benötigte Zeit kann man mit dem in der bash eingebauten Kommando 'time' messen. Eine Ausgabe sieht z.B. so aus:

Code: Alles auswählen

stefan@stefan:~/projects/mcpic$ time ./mcpic test/systest
A         417     417       0       0
B         886     583       0     417
C         583     417     417       0

real    0m0.005s
user    0m0.002s
sys     0m0.002s
Die letzten drei Zeilen werden von 'time' erzeugt.

Mein Frage: Wie kann ich die Ausgabe komplett, also inkl. der letzten drei Zeilen in eine Datei umleiten ? Meine Suche in allen möglichen Foren war erfolglos. Wenn ich mit ">" bzw. "2>" umleite, dann wird nur stdout bzw. stderr des ausgeführten Befehls (in obigem Beispiel 'mcpic') umgeleitet, der Rest wir weiter in der shell ausgegeben.

Es gibt wohl auch ein stand-alone 'time'-Programm, das dann auch eine Option -o hat, mit der eine Ausgabe erzeugt wird. Leider ist das bei Debian nicht so.

Kennt jemand eine Möglichkeit, wie man die Ausgabe von 'time' umleiten kann ? Gibt's andere Möglichkeiten, die Zeit zu bekommen, so dass sie in einem C-Programm weiterverarbeitet werden kann ?

Es geht mir nicht darum, wie man in dem Programm (in obigem Bsp. 'mcpic') selbst die Zeit misst - das macht man mit clock().

Stefan

Benutzeravatar
MartinL25
Beiträge: 437
Registriert: 17.04.2005 15:29:09

Beitrag von MartinL25 » 13.07.2005 11:45:49

Dazu benutzt Du am besten "/usb/bin/time" aus dem Paket "time", nicht den in Bash eingebauten Befehl.

Code: Alles auswählen

/usr/bin/time -o <outputfile> <ausführbare.datei>
Gruß Martin

Benutzeravatar
HotblackDesiato
Beiträge: 203
Registriert: 12.08.2004 16:26:56

Beitrag von HotblackDesiato » 13.07.2005 17:47:59

MartinL25 hat geschrieben:Dazu benutzt Du am besten "/usb/bin/time" aus dem Paket "time", nicht den in Bash eingebauten Befehl.

Code: Alles auswählen

/usr/bin/time -o <outputfile> <ausführbare.datei>
Gruß Martin
Tja, und genau das ist das Problem - auf meinem Rechner gibt's ein /usr/bin/time halt nicht (Debian etch).

Stefan

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 13.07.2005 18:03:27

Hallo HotblackDesiato,
an "time" solltest Du unter testing/etch "herankommen" :wink:
http://packages.debian.org/testing/allp ... .en.txt.gz

Code: Alles auswählen

aptitude install time
Gruß fuzzy

Benutzeravatar
MartinL25
Beiträge: 437
Registriert: 17.04.2005 15:29:09

Beitrag von MartinL25 » 13.07.2005 18:16:14

einfach mit

Code: Alles auswählen

apt-get install time
nachinstallieren, ist ein stabiles Paket und nur 33KB groß. Kannst Du Dir zur Not sogar auf eine Floppy kopieren und mit dpkg installieren falls Du mit der entsprechenden Maschine nicht im Netz bist.

Gruß Martin

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.07.2005 21:25:11

funktioniert natürlich auch mit dem "builtin" time kommando:

Code: Alles auswählen

root:~# which time
/usr/bin/time
root:~# mv /usr/bin/time /usr/bin/time.ori 
root:~# which time
root:~# { time echo blabla; } 2>time.log
blabla
root:~# cat time.log

real    0m0.000s
user    0m0.000s
sys     0m0.000s
Gruß
gms

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 23.07.2005 00:42:24

gms hat geschrieben:funktioniert natürlich auch mit dem "builtin" time kommando:
Aber nur, wenn das aufgerufene Programm keine Ausgaben an stderr sendet.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 23.07.2005 18:56:34

Joghurt hat geschrieben:
gms hat geschrieben:funktioniert natürlich auch mit dem "builtin" time kommando:
Aber nur, wenn das aufgerufene Programm keine Ausgaben an stderr sendet.
wüßte keinen Grund für diese Einschränkung:

Code: Alles auswählen

gms@gms1:~$ { time { echo "writing to stderr" >/dev/stderr; } 2>&1 ; } 2>time.log
writing to stderr
gms@gms1:~$ cat time.log

real    0m0.000s
user    0m0.000s
sys     0m0.000s
stderr kann sogar auf /dev/fd/x und danach wieder auf stderr umgeleitet werden:

Code: Alles auswählen

gms@gms1:~$ { { time { echo "writing to stderr" >/dev/stderr; } 2>/dev/fd/3  ; } 2>time.log ; } 3>/dev/stderr
writing to stderr
gms@gms1:~$ cat time.log 
real    0m0.000s
user    0m0.000s
sys     0m0.000s



Gruß
gms

Antworten