Προς το περιεχόμενο

C++ Redirect std::cerr


NewProject

Προτεινόμενες αναρτήσεις

Δημοσ.

Στον κωδικα μου εχω

>
std::cerr << "sth" << std::endl ;

 

και αν τρεξω το προγραμμα , εστω 'a.exe' χωρις παραμετρους το 'sth' εμφανιζεται στη κονσολα ενω αν το τρεξω με 'a.exe 2> cerr.txt' το output ειναι παλι στη κονσολα και οχι στο αρχειο cerr.txt . Καμια συμβουλη ?

Δημοσ.

Και με το παρακάτω minimal παράδειγμα παρατηρείς την ίδια συμπεριφορά;

 

>
#include <iostream>

int main(int argc, char *argv[])
{
   std::cerr << "sth" << std::endl;

   return 0;
}

Δημοσ.

Και με το παρακάτω minimal παράδειγμα παρατηρείς την ίδια συμπεριφορά;

 

>
#include <iostream>

int main(int argc, char *argv[])
{
   std::cerr << "sth" << std::endl;

   return 0;
}

 

ναι , την ιδια αλλα αν τα προγραμματα τα τρεξω απο το command prompt τρεχουν κανονικα (κανονικα==ετσι οπως θα επρεπε να τρεχουν δηλαδη).Οταν φτιαχνω συντομευσεις με παραμετρους , εχω το προβλημα

Δημοσ.

Windows 7 x64 εδώ, δε μπορώ να το αναπαράγω!

 

Σίγουρα συμπληρώνεις σωστά το πεδίο "Target" στο shortcut που δημιουργείς;

 

>C:\Windows\System32\cmd.exe /c C:\A_EXE_PATH\a.exe 2>cerr.txt

Δημοσ.

Τα I/O redirections τα χειρίζεται το εκάστοτε κέλυφος. Το standard κέλυφος στα Windows είναι το cmd.exe. Εσύ καλείς το πρόγραμμά σου χωρίς να μεσολαβεί κάποιο κέλυφος και υποπτεύομαι ότι το redirection που ορίζεις στο shortcut αγνοείται εντελώς.

Δημοσ.

Τα I/O redirections τα χειρίζεται το εκάστοτε κέλυφος. Το standard κέλυφος στα Windows είναι το cmd.exe. Εσύ καλείς το πρόγραμμά σου χωρίς να μεσολαβεί κάποιο κέλυφος και υποπτεύομαι ότι το redirection που ορίζεις στο shortcut αγνοείται εντελώς.

 

 

ωραια , ευχαριστω . Τελικα απλα εφτιαξα ενα .bat

  • 2 εβδομάδες αργότερα...
Δημοσ.

Μέσα από το πρόγραμμά σου, γίνεται με τον εξής κώδικα (πριν τελειώσει το πρόγραμμα το ξανακάνω tie στο παλιό stream σε περίπτωση που το C++ runtime θέλει να γράψει κάτι.

 

>
#include <iostream>
#include <fstream>

int main()
{
 std::cerr << "sth" << std::endl; // to console

 std::ofstream f("err.txt");
 std::streambuf* const old = std::cerr.rdbuf(f.rdbuf());

 std::cerr << "sth else" << std::endl; // to err.txt

 std::cerr.rdbuf(old);

 std::cerr << "sth more" << std::endl; // to console

 return 0;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...