Kirjoittaja Aihe: Skriptin tulostuksen ohjaus tiedostoon  (Luettu 2231 kertaa)

dotsi

  • Käyttäjä
  • Viestejä: 112
    • Profiili
Skriptin tulostuksen ohjaus tiedostoon
« : 26.03.07 - klo:15.42 »
Terve,

Minulla on seuraavanlainen shelliskripti (sisällä siis perl-koodia)

Koodia: [Valitse]
#!/bin/bash
gpspipe -w gpsd.mainframe.cx | perl -e '
use strict;
my ($sat, $lat, $lon)=(0,0,0);

while(<>) {
  if (m/GPSD,Y=(.*)/) { #satelites in view line
    my @a=split(/[ :]/, $1);
    $sat=$a[2]; #store number of sats in view
  } elsif (m/GPSD,O=(.*)/) { #PVT line
    my @a=split(" ", $1);
    ($lat, $lon)=($a[3], $a[4]);
    print join(", ", $sat,$lat,$lon), "\n";
  }}'

joka normaalisti ajettuna tulostaa nätisti gpsd-daemoniin liitetylle GPS-paikantimelle (tässä tapauksessa gpsd.mainframe.cx:ssä sijaitseva, mutta lopullisessa versiossa käytän omaani, kunhan saan tämän toimimaan) näkyvien satelliittien määrän sekä järjestelmän ilmoittamat koordinaatit samalle riville, tähän tapaan:

Koodia: [Valitse]
ltpk@ubuntu:~$ ./loggaa
0, 53.527171, -113.530162
11, 53.527170, -113.530156
11, 53.527170, -113.530156
11, 53.527170, -113.530156
11, 53.527168, -113.530150

...

Kuitenkin, kun yritän ohjata skriptin tulostusta tiedostoon komentamalla
Koodia: [Valitse]
./loggaa > logi.txt ei tiedostoon tulostu mitään. Miksihän näin? Tässä on varmaan taas joku pieni juttu mitä en huomaa, mutta toivottavasti joku sen keksii.

Kiitän jo etukäteen avustanne.

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: Skriptin tulostuksen ohjaus tiedostoon
« Vastaus #1 : 26.03.07 - klo:17.53 »
Kuitenkin, kun yritän ohjata skriptin tulostusta tiedostoon komentamalla
Koodia: [Valitse]
./loggaa > logi.txt ei tiedostoon tulostu mitään. Miksihän näin?

Ensimmäisenä mieleen tuli sellainen vaihtoehto että perl puskuroi dataa eikä kirjoita sitä välittömästi ulos. Pienen empiirisen tutkimuksen suorittaminen tuntui vahvistavan tämän epäilyn.

Pääset puskuroinnista eroon lisäämällä perl-skriptisi alkuun rivit:
Koodia: [Valitse]
use IO::Handle;
autoflush STDOUT 1;

dotsi

  • Käyttäjä
  • Viestejä: 112
    • Profiili
Vs: Skriptin tulostuksen ohjaus tiedostoon
« Vastaus #2 : 26.03.07 - klo:18.07 »
Kuitenkin, kun yritän ohjata skriptin tulostusta tiedostoon komentamalla
Koodia: [Valitse]
./loggaa > logi.txt ei tiedostoon tulostu mitään. Miksihän näin?

Ensimmäisenä mieleen tuli sellainen vaihtoehto että perl puskuroi dataa eikä kirjoita sitä välittömästi ulos. Pienen empiirisen tutkimuksen suorittaminen tuntui vahvistavan tämän epäilyn.

Pääset puskuroinnista eroon lisäämällä perl-skriptisi alkuun rivit:
Koodia: [Valitse]
use IO::Handle;
autoflush STDOUT 1;


Tämä auttoi, kiitoksia. Logitiedostoon eivät nyt tallennu myöskään nollalla alkavat rivit, eli tapaukset joissa satelliittien lukumäärä ei vielä ole selvillä tms. Tämä on pelkästään positiivista itse tiedonkeruun kannalta, koska noita virhetuloksia ei tarvitse käsin poistaa. Osaatko kuitenkin sanoa että mistä rivien poisjäänti johtuu? Normaalissa stdout-tulosteessa ne kuitenkin näkyvät.