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.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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.pldoc.pisz.plpdf.pisz.pltejsza.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 |
|