Wpis z mikrobloga

Mam aplikację, która po uruchomieniu jej w cmd pokazuje cały output. Ale jeśli użyję pythonowego subprocess lub childprocess z nodejs, to nie mogę przechwycić stdout (ani stderr) po pierwszym wpisie.

Próbowałem też program.exe > mojLog.txt ale także ucina się po pierwszym wpisie.

Próbowałem używać screen z cygwina, ale w cygwinie nawet w terminalu nie pokazuje dalszej części. Dopiero po zakończeniu programu pokazuje całość.

Aplikacja zapisuje loga do pliku, ale nie mogę go odczytać, jest jakby zablokowany.

W jaki sposób mogę dostać się do tego i odczytać pełny output jaki daje cmd? Skoro po odpaleniu w wierszu poleceń mam cały ouptut, to musi być jakoś możliwość zapisania tego chociaż do pliku.

Macie jakieś pomysły?

#programowanie #pytanie #python #nodejs #csharp #windows
  • 8
@spike200: Używasz communicate() w subprocess?

Może jak zapisujesz do pliku to cały czas output ładuje do Niego? Użyj context managera lub zamknij stream z close() w skrypcie pythonowym. Ewentualnie w drugiej konsoli zapuść 'tail -f' na tym pliku i zrób sobie podgląd live.
@DodatnieUjemny: Nie używam. Jeśli odpale subprocesd bez stdout=PIPE to po prostu wyrzuca mi cały Output do konsoli, ale nic nie mogę z nim zrobić. Próba zapisu do pliku przez Python runThatApp.py > plik.txt kończy się tak samo jakbym odpalił prosto na exe - po prostu pokazuje tylko jeden wpis.

Jak odpale z stdout=PIPE I chce odczytywać to przez readline() to także przechwycic mogę tylko pierwsza linię.

Tail - f też odpada,
@spike200: jest paczka w npm, node-pty. Dzieki niej ta twoja apka bedzie myslala, ze jest na konsoli, process.stdout.isTTY zwraca true w Node jak się tego używa. Spróbuj.

BTW, chyba spawn z tej paczki wymaga, by byla podana pelna sciezka do .exe ktore odpalasz.
@zrakiep: Ok dzieki, widzialem to wczoraj ale doszedlem do wniosku że stanie się to samo co w cygwin i gitbash, czyli nie będzie outputu. Ale spróbuje to ogarnąć dzisiaj, może faktycznie się uda.