ďťż
 
przekierowanie STDOUT i STDERR? ďťż
 
przekierowanie STDOUT i STDERR?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

przekierowanie STDOUT i STDERR?



Martin Lukasik - 27-04-2006 00:18
przekierowanie STDOUT i STDERR?
  Witam ponownie...

Jest linijka:
$dbh = DBI->connect("DBI:ODBC:SQLServer Wire Protocol", $user, $pwd);

...ktora wyrzuca na STDOUT lub STDERR (ciezko stwierdzic):

---START---

Warning:
[DataDirect][ODBC SQL Server Driver][SQL Server]
---KONIEC---

przez co krzaczy mi skrypt, ktory wyrzuca dane na STDOUT, ktore z kolei
czytane sa przez kolejna aplikacje.
(Aplikacja dostaje "[DataDirect][ODBC SQL Server Driver][SQL Server]" itp.,
zamiast komend i sie wywala).
Jak sprawic, zeby po wpisaniu $dbh... sterownik nie wyrzucal zadnych
informacji?
Cos w stylu $cmd = `komenda >/dev/null`;

Googlam i sie dogoolgac nie moge...

Dzieki,
Marcin





Martin Lukasik - 27-04-2006 00:18

  ....wlasciwie to $sth = $dbh->prepare($sql); wyrzuca te dane. Ale to raczej
nie ma wiekszego znaczenia.

m.




Martin Lukasik - 27-04-2006 00:18

  > ...wlasciwie to $sth = $dbh->prepare($sql); wyrzuca te dane. Ale to raczej
> nie ma wiekszego znaczenia.

Dobra, mam ;-)

Dla zainteresowanych -- zrobilem taki brzydki trick:

open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
close STDOUT;
$sth = $dbh->prepare($sql);

open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";




Grzegorz Szyszlo - 27-04-2006 00:18

  Martin Lukasik wrote:
>>...wlasciwie to $sth = $dbh->prepare($sql); wyrzuca te dane. Ale to raczej
>>nie ma wiekszego znaczenia.
>
>
> Dobra, mam ;-)
>
> Dla zainteresowanych -- zrobilem taki brzydki trick:
>
> open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
> close STDOUT;
> $sth = $dbh->prepare($sql);
>
> open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";

faktycznie brzydki, wrecz paskudny.
zanim zrobisz DBI->connect ,
przeczytaj man dbi albo
perldoc DBI (to samo)
poszukaj slowa kluczowego STDERR,
w ten sposob trafisz do rozdziału TRACING .
zapoznaj sie z tym. dziwie sie tylko, czemu problem lezy
w STDOUT, bo opis jednoznacznie wskazuje na STDERR .

znik.





Martin Lukasik - 27-04-2006 00:18

  > faktycznie brzydki, wrecz paskudny.
> zanim zrobisz DBI->connect ,
> przeczytaj man dbi albo
> perldoc DBI (to samo)
> poszukaj slowa kluczowego STDERR,
> w ten sposob trafisz do rozdziału TRACING .
> zapoznaj sie z tym. dziwie sie tylko, czemu problem lezy
> w STDOUT, bo opis jednoznacznie wskazuje na STDERR .

I tak w sumie nie do konca rozwiazalo to moj problem, bo w $oldout jest
STDOUT, w ktorym cos sie znajduje, i jak z powrotem to wlacze, to wyrzuca
wszystko.
Problem jest z STDOUT dlatego, ze to nie DBI wyrzuca tekst, tylko driver MS
SQL-a.
A on to robi na STDOUT, a nie STDERR.

m.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 27-04-2006 00:18

  Użytkownik Martin Lukasik napisał:
> Witam ponownie...
>
> Jest linijka:
> $dbh = DBI->connect("DBI:ODBC:SQLServer Wire Protocol", $user, $pwd);
>
> ..ktora wyrzuca na STDOUT lub STDERR (ciezko stwierdzic):

> Jak sprawic, zeby po wpisaniu $dbh... sterownik nie wyrzucal zadnych
> informacji?
> Cos w stylu $cmd = `komenda >/dev/null`;
>
> Googlam i sie dogoolgac nie moge...

A po co armate na muche?

perldoc DBI i szukaj PrintError.

--
P.M.




Vava - 27-04-2006 00:19

  Martin Lukasik <marcin@milea.pl.i.hate.this.spam> wrote:

>> ...wlasciwie to $sth = $dbh->prepare($sql); wyrzuca te dane. Ale to
>> raczej
>> nie ma wiekszego znaczenia.
>
> Dobra, mam ;-)
>
> Dla zainteresowanych -- zrobilem taki brzydki trick:
>
> open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
> close STDOUT;
> $sth = $dbh->prepare($sql);
>
> open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";

Bez sensu - jak ktoś już wcześniej poradził - poczytaj dokumentację DBI w
zakresie RaiseError i PrintError...

$dbh = DBI->connect($data_source, $user, $pass, {
PrintError => 0,
AutoCommit => 0
});

$sth = $dbh->prepare($sql) or obsluga_bledu($dbh->errstr);

Pozdrawiam
--
Vava
Wawrzyniec Żurowski
Victoria vale, et ubique es, suaviter sternutas




Martin Lukasik - 27-04-2006 00:19

  > Bez sensu - jak ktoś już wcześniej poradził - poczytaj dokumentację DBI w
> zakresie RaiseError i PrintError...
>
> $dbh = DBI->connect($data_source, $user, $pass, {
> PrintError => 0,
> AutoCommit => 0
> });
>
> $sth = $dbh->prepare($sql) or obsluga_bledu($dbh->errstr);

No i co? Myslisz, ze dziala?
Tez nie przeczytales uwaznie. To sterownik mssql zwraca ostrzezniee, na
STDOUT.
Ustawienie PrintErrot i AutoCommit nic nie daje.

Moze wylaczenie STDOUT nie jest najlepszym rozwiazaniem, ale w sumie czemu
nie. Wykorzystalem przyklad z dokumentacji perla. Jesli jest, to do czegos
sluzy.

m.




Grzegorz Szyszlo - 27-04-2006 00:19

  Martin Lukasik wrote:
>>faktycznie brzydki, wrecz paskudny.
>>zanim zrobisz DBI->connect ,
>>przeczytaj man dbi albo
>>perldoc DBI (to samo)
>>poszukaj slowa kluczowego STDERR,
>>w ten sposob trafisz do rozdziału TRACING .
>>zapoznaj sie z tym. dziwie sie tylko, czemu problem lezy
>>w STDOUT, bo opis jednoznacznie wskazuje na STDERR .
>
>
> I tak w sumie nie do konca rozwiazalo to moj problem, bo w $oldout jest
> STDOUT, w ktorym cos sie znajduje, i jak z powrotem to wlacze, to wyrzuca
> wszystko.
> Problem jest z STDOUT dlatego, ze to nie DBI wyrzuca tekst, tylko driver MS
> SQL-a.
> A on to robi na STDOUT, a nie STDERR.

no to straszna kicha. doraznie zrobilbym dokladnie tak jak ty to robisz,
ale jednak szukalbym sposobu na uciszenie sterownika MS SQL-a.
Skoro on generuje ostrzezenie, to zazwyczaj ma ku temu jakis powod.

znik.




Martin Lukasik - 27-04-2006 00:19

  > no to straszna kicha. doraznie zrobilbym dokladnie tak jak ty to robisz,
> ale jednak szukalbym sposobu na uciszenie sterownika MS SQL-a.
> Skoro on generuje ostrzezenie, to zazwyczaj ma ku temu jakis powod.

Powod -- ciezko powiedziec. Wiem, ze wyrzuca "Warning:
[DataDirect][ODBC SQL Server Driver][SQL Server]" -- nic z tego wyczytac nie
mozna.
No to zarzucilem strace, ale dalej nic z tego nie wyszlo.
Wyrzuca to przy $sth->prepare($sql); a $sql to proste "select * from costam
order by costam";
Moglbym wyrzucic tekst z tego sterownika, gdybym mial zrodla, ale to
komercha i nie mam.
Mozna by tez zrobic dwa skrypty. Odpalac skrypt1.pl, w ktorym byloby cos w
stylu: $s = `skrypt2.pl parametr`;, i pozniej w skrypt1.pl przejechac to
s///;
Ale to juz jest glupsze niz zamkniecie STDOUT ;-)

m.




Krzysztof =?iso-8859-2?Q?Krzy=BFaniak?= - 27-04-2006 00:19

  "Martin Lukasik" <marcin@milea.pl.i.hate.this.spam> writes:

>> no to straszna kicha. doraznie zrobilbym dokladnie tak jak ty to robisz,
>> ale jednak szukalbym sposobu na uciszenie sterownika MS SQL-a.
>> Skoro on generuje ostrzezenie, to zazwyczaj ma ku temu jakis powod.
>
> Powod -- ciezko powiedziec. Wiem, ze wyrzuca "Warning:
> [DataDirect][ODBC SQL Server Driver][SQL Server]" -- nic z tego wyczytac nie
> mozna.
[..]

Zawsze możesz spróbować użyć coś w stylu IO::Capture

eloy
--
-------e-l-o-y----------------------------e-l-o-y-@-k-o-f-e-i-n-a-.-n-e-t------

jak to dobrze, że są oceany - bez nich byłoby jeszcze smutniej




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 27-04-2006 00:19

  Martin Lukasik napisał(a):
>>no to straszna kicha. doraznie zrobilbym dokladnie tak jak ty to robisz,
>>ale jednak szukalbym sposobu na uciszenie sterownika MS SQL-a.
>>Skoro on generuje ostrzezenie, to zazwyczaj ma ku temu jakis powod.
>
>
> Powod -- ciezko powiedziec. Wiem, ze wyrzuca "Warning:
> [DataDirect][ODBC SQL Server Driver][SQL Server]" -- nic z tego wyczytac nie
> mozna.

Ale może da się uciszyć sterownik jakimś parametrem albo configiem?

> No to zarzucilem strace, ale dalej nic z tego nie wyszlo.
> Wyrzuca to przy $sth->prepare($sql); a $sql to proste "select * from costam
> order by costam";
> Moglbym wyrzucic tekst z tego sterownika, gdybym mial zrodla, ale to
> komercha i nie mam.

No to dzwonić do supportu z problemem!

--
P.M.




Martin Lukasik - 27-04-2006 00:19

  > Ale może da się uciszyć sterownik jakimś parametrem albo configiem?

W dokumentacji nic na ten temat. Wysylalem im maila, ale sie jakis chlopok
pogubil w zeznaniach; generalnie nie wiedzial o co mi chodzi i co to jest
"stdout". Spytal tez w czym mi szkodzi taki komunikat. "Przeciez to tylko
ostrzezenie" ;-)

> No to dzwonić do supportu z problemem!

Wlasnie to ewaluuje, jak skoncze to trzeba bedzie zaplacic. A wtedy na pewno
spytam ;)

Dzieki wszystkim,
m.




Grzegorz Szyszlo - 28-04-2006 00:53

  Martin Lukasik wrote:
>>no to straszna kicha. doraznie zrobilbym dokladnie tak jak ty to robisz,
>>ale jednak szukalbym sposobu na uciszenie sterownika MS SQL-a.
>>Skoro on generuje ostrzezenie, to zazwyczaj ma ku temu jakis powod.
>
>
> Powod -- ciezko powiedziec. Wiem, ze wyrzuca "Warning:
> [DataDirect][ODBC SQL Server Driver][SQL Server]" -- nic z tego wyczytac nie
> mozna.
> No to zarzucilem strace, ale dalej nic z tego nie wyszlo.
> Wyrzuca to przy $sth->prepare($sql); a $sql to proste "select * from costam
> order by costam";
> Moglbym wyrzucic tekst z tego sterownika, gdybym mial zrodla, ale to
> komercha i nie mam.
> Mozna by tez zrobic dwa skrypty. Odpalac skrypt1.pl, w ktorym byloby cos w
> stylu: $s = `skrypt2.pl parametr`;, i pozniej w skrypt1.pl przejechac to
> s///;
> Ale to juz jest glupsze niz zamkniecie STDOUT ;-)

mozesz tez zrobic procedurki ktore przymkna STDOUT tylko na czas prepare ;)
nie wiem czy to cos wogole pomoze, ale ja unikam altoladowania,
i na poczatku mam
use DBI;
use DBD::Pg;

tak wiem, postgres, ale byc moze ladujac od razu sterownik ODBC MS Sql,
uda sie podczas inicjacji ustawic mu parametry zeby sie nie darl jak glupi.

znik.




Martin Lukasik - 29-04-2006 00:16

  > mozesz tez zrobic procedurki ktore przymkna STDOUT tylko na czas prepare
> ;)

Wlasnie tak zrobilem.

> nie wiem czy to cos wogole pomoze, ale ja unikam altoladowania,
> i na poczatku mam
> use DBI;
> use DBD::Pg;
>
> tak wiem, postgres, ale byc moze ladujac od razu sterownik ODBC MS Sql,
> uda sie podczas inicjacji ustawic mu parametry zeby sie nie darl jak
> glupi.

Probowalem. Ogolnie smutna sprawa, ale dziala, wiec mam to gdzies.
Uzywam tego tylko do wybierania numeru klienta z bazy i sprawdzenia, czy
numer istnieje czy nie.
Zapytanie jest realizowane moze z 5 - 10 razy na godzine, wiec przezyje.

m.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Przekierowanie (redirect) jak przekierowac ruch? stdout postgres cygwin raport zapytanie sql Malutka baza danych db2 i xml - zapewne naiwny problem jaka struktura tabel najlepsza? Lamerskie - pisanie po =?ISO-8859-2?Q?okr=EAgu_-_corel?= program do powiekszania ? Corel_rozmieszczenie na arkuszu
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com