Zdziwiłbym sie jakby ci ktoś odpowiedział. Błędy zgłasza się tak:
- Co zrobiłeś (kompletne reproduction steps)
- Co wg ciebie powinno się stać
- Co się faktycznie stało
Z twojego opisu w sumie nie wiadomo z czym konkretnie jest problem.
A teraz co mówi dokumentacja:
https://docs.python.org/3/library/subprocess.html#subprocess.check_call
Code needing to capture stdout or stderr should use run() instead
hmm
As you can see I write stderr and stdout to temporary files (error and output)
Ja nic takiego nie widzę. Piszesz do jakiegoś
loggera, nie wiadomo skąd i nie wiadomo jak. Potem nie wiadomo jak otwierasz ten plik z logami i co w ogóle przekazujesz do tej swojej funkcji printCheckOutput
i nie pokazałe też co robi to twoje collectLogFromOutAndErr
.
Warto moze byłoby tez napisać na którym etapie coś się sypie -> czy ten twój logger nie tworzy w ogóle pliku z logami (może nie jest flushnięty?), czy pliki z logami się tworzą, ale twoje collectLogFromOutAndErr
nie potrafi ich poskładać w jeden wynikowy plik (znów: może nie flushujesz albo nie zamykasz pliku?), czy może te pliki się tworzą ok, ale twoja funkcja printCheckOutput
nie wyłapuje tego co powinna wyłapać (może kodowanie jest zrypane?).
Mam nadzieje że wiesz ze jak wołasz jeden skrypt z drugiego przez subprocess.call to odpala sie nowy interpreter i te skrypty niczego nie "współdzielą"?
Mam nadzieje ze wiesz też, że jeśli próbujesz przepchać jakieś dane między tymi procesami przez stdin/stdout to trzeba uważać na to, zeby nie trafić na wypełnienie bufora systemowego. Może się tak łatwo zdarzyc że proces pisze na stdout ale drugi proces który ma to czytać czeka aż ten pierwszy się zakończy zanim odczyta, a to nigdy nie następuje, bo pierwszy się blokuje jak bufor na stdout jest pełny, bo nikt z niego nie czyta. W efekcie trzeba generalnie czytać periodycznie a nie czekać aż drugi proces się skończy.
Moja rada: zrób mały alekompletny
przykład kodu który po uruchomieniu nie działa i pokazuje konkretnie twój problem.