Nowe posty

Autor Wątek: tProblem z polecenie time  (Przeczytany 8066 razy)

miodas007

  • Gość
tProblem z polecenie time
« dnia: 2009-12-13, 14:27:41 »
Nie wiem dlaczego nie mogę wykonać potoku na poleceniu time np.
time ./skrypt | awk '{print $3}'
ani żadnego innego. Nie mogę nawet
time ./skrypt | tee plik
mógłbym się dowiedzieć dlaczego? Chce z time wyciągnąć liczbę jedną i nie mogę

Krzysiek1990

  • Gość
tProblem z polecenie time
« Odpowiedź #1 dnia: 2009-12-13, 14:48:08 »
Pokaż skrypt. Być może tam masz jakieś błędy.

miodas007

  • Gość
tProblem z polecenie time
« Odpowiedź #2 dnia: 2009-12-13, 16:24:23 »
Trudno pokazać skrypt  bo go nie mam
zanim zaczałem pisać chciałem sie dobrać do interesujacej mnie liczby
wystarczy ze w konsoli wpisze nawet jak wspomnialem
time ./skrypt | tee plik
i nie chodzi ;/

Krzysiek1990

  • Gość
tProblem z polecenie time
« Odpowiedź #3 dnia: 2009-12-13, 16:45:03 »
Piszesz w poleceniu ./skrypt. Musisz mieć skrypt bo go wywołujesz.
Albo ja Cię nie rozumiem.
Kombinuj jeszcze sam coś i niech się wypowie ktoś z forumowiczów na ten temat bo być może czegoś nie wiem.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
tProblem z polecenie time
« Odpowiedź #4 dnia: 2009-12-13, 16:45:50 »
Co chcesz złapać do potoku? Wynik działania ./skrypt czy wynik działania time?
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

miodas007

  • Gość
tProblem z polecenie time
« Odpowiedź #5 dnia: 2009-12-13, 16:54:15 »
wynik działanie time
skrypt nic nie ekran nie wypisuje

//nie zrozumielem pytanie "pokaz skrypt". Myslełem że pyta mnie ktoś o skrypt zawierające linijkę wywołanie fcji time. Skrypt to jest programik C który sobie przepisuje cos z pliku do pliku. Mniejsza z tym co robi. Nic nie wypisuje na ekran.

Krzysiek1990

  • Gość
tProblem z polecenie time
« Odpowiedź #6 dnia: 2009-12-13, 17:14:36 »
No teraz już jest jaśniej. Skoro programik przepisuje z pliku do pliku to niekoniecznie wyświetla to na ekranie. Pokaż zawartość kodu, a może się przyda. Nie jestem przekonany do tego co teraz powiem bo nigdy nie próbowałem czegoś takiego ale zasugeruję Ci coś.
Czy za pomocą grep nie możesz sobie wyłączyć tej cyfry?

miodas007

  • Gość
tProblem z polecenie time
« Odpowiedź #7 dnia: 2009-12-13, 17:56:25 »
Czekaj bo nie rozumiem i ty nie do końca mnie zrozumiałeś :)
skrypt co przepisuje z pliku to pliku NIE WYPISUJE nic na ekran
chce wydobyć pewną liczbą z polecenie time (dokładnie sys).
mam z tym problem bo w ogóle mi nie chodzi potok na fcji time. Może dlatego że na potok idzie to co robu skrypt a nie time, co byłoby dla mnie dziwne ale nie wiem.
Chce po prostu na potok przekazać te trzy linijki co "tworzy" polecenie time

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
tProblem z polecenie time
« Odpowiedź #8 dnia: 2009-12-13, 18:08:12 »
Dobra, teraz się rozjaśniło.

Część konsoli ma wbudowany w siebie wewnętrzny time o zawężonych możliwościach. Upewnij się, że korzystasz z programu time i wywołujesz go przez pełną ścieżkę (na ogół /usr/bin/time).

time wyświetla informacje o procesie na strumień błędów STDERR, czyli do potoku nie łapanego przez pipe "|". Parametr -p wymusza format "trzylinijkowy".

Rozwiązania są dwa:

* Jeżeli wykonywany skrypt/program rzeczywiście nic nie pisze na ekran (znaczy STDOUT) to możesz zrobić taki trick (2>&1 "przepina" STDERR na STDOUT):

/usr/bin/time -p ./program 2>&1 | awk ...
* Jeżeli możesz pisać do pliku, to zrób:

/usr/bin/time -p -o plik_logu.txt ./program
cośtamcośtam plik_logu.txt
W obu przypadkach możesz skorzystać z magicznego parametru -f (zamiast -p) formatującego wyjście dokładnie do twoich potrzeb. Pełna dokumentacja dostępna w

man 1 time
To '1' jest ważne, bo bez tego wyświetla opis funkcji systemowej a nie polecenia.

Jeżeli interesuje cię tylko czas system, to polecenie zwija się do takiego:
/usr/bin/time -f"%S" ./program 2>&1 | dalsza_obróbka
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

miodas007

  • Gość
tProblem z polecenie time
« Odpowiedź #9 dnia: 2009-12-13, 19:42:21 »
Heh..
niestety ale
/usr/bin/time
reaguje: "Nie ma takiego pliku lub katalogu"
Robię to na zdalnym serwerze więc nie mogę zainstalować tego time o którym mowa
tymczasem
time ./prog 2>&1 | ...
nadal nie działa

arctgx

  • Gość
tProblem z polecenie time
« Odpowiedź #10 dnia: 2009-12-13, 19:52:13 »
W Debianie, a więc może i w Ubuntu, polecenie /usr/bin/time znajduje się w paczce time. Zainstaluj ją.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
tProblem z polecenie time
« Odpowiedź #11 dnia: 2009-12-13, 20:08:39 »
Hint: "Część konsoli ma wbudowany w siebie wewnętrzny time o zawężonych możliwościach.".

Napisz na jakim systemie to uruchamiasz (uname -a) i co odpowiada polecenie which time. Jeżeli to jakiś hosting dedykowany, to w jakiej firmie/jaka opcja. Wtedy może będziemy w stanie pomóc.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

miodas007

  • Gość
tProblem z polecenie time
« Odpowiedź #12 dnia: 2009-12-13, 20:29:10 »
uname -u przecież nie zwraca na jakim systemie pracuje (tyle ze linux pisze)
which time nic nie zwraca

Jest to laboratoryjny serwer
Jednak skoro polecenie time ./skrypt działa to znaczy że jak tu napisano chodzi wewnętzny time o zawęzonych możliwościach (dla mnie wystarczający).
Jak go wysłać na potok?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
tProblem z polecenie time
« Odpowiedź #13 dnia: 2009-12-14, 07:18:36 »
1. uname -a było po to, żeby sprawdzić czy to nie jest jakieś BSD, gdzie niektóre polecenia są w ścieżce /usr/local .
2. Pytanie jaki linux dalej nie znalazło odpowiedzi z Twojej strony.
3. Jednym z ograniczeń poleceń wewnętrznych jest to, że niekoniecznie współpracują z potokami (pamiętaj, że ten Twój time to nie osobny proces a zwykła funkcja działająca w ramach obecnego procesu powłoki bash). Przeczytaj parafrazę ostatnich wypowiedzi:

 - Mam fortepian do przewiezienia, ale nie wchodzi do mojego pojazdu.
 - Masz wbudowanego malucha (o ograniczonych możliwościach) oraz prawdopodobnie Stara z firmy zewnętrznej. Do takich problemów lepiej nadaje się Star.
 - Star nie jest dostępny ale faktycznie mam malucha. Twoje wcześniejsze sugestie sposobu przewiezienia fortepianu maluchem nie działają. Jak to zrobić maluchem?
 - Maluch ma ograniczone możliwości i tego najwyraźniej akurat się nie da zrobić.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

miodas007

  • Gość
tProblem z polecenie time
« Odpowiedź #14 dnia: 2009-12-14, 19:42:29 »
Jaki linux nie powiedziałem bo nie wiem na jakim stoi serwer
Ale nevermind :)
Zrobiłem naokoło. To co chciałem uzyskać z polecenie time uzyskałem za pomocą funkcji systemowych w C.
Dzięki wszystkim za pomoc.