2013-04-16 61 views
6

Piszę skrypt basha, który zostanie wywołany z crona.Ośmiornica pytona z bashowego skryptu

Skrypt bash uruchamia polecenie Pythona, które wykrywa, gdy jest w terminalu, używając pythons os.isatty function i wysyła różne rzeczy w zależności od tego, czy jest uruchamiane ręcznie, czy za pośrednictwem crona. To sprawia, że ​​debugowanie jest bardzo trudne i chciałbym, aby było tak, że zawsze zakłada, że ​​nie jest w TTY.

Chciałbym móc dodać coś do skryptu basha, aby oszukać skrypt Pythona, że ​​nie jest uruchamiany w terminalu i dlatego zawsze wypisuje to samo.

Aby potwierdzić, mam kontrolę nad skryptem bash, ale nie chcę edytować pytona, ponieważ jest to aplikacja w pakiecie.

Wszelkie pomysły?

Mam nadzieję, że to ma sens.

Dziękuję bardzo z góry.

+0

do wyjaśnienia: chcesz skrypt "myśleć", że _jest_ uruchomiony z terminala lub że _is not_ bieganie z jednym? –

+0

po prostu zadzwoń do isatty i przechowuj go w jakimś globalnie dostępnym miejscu ... teraz możesz ustawić swoją wartość true lub false ... jeśli robisz os.isatty w całym miejscu to prawdopodobnie i tak nie świetna forma –

+0

ExP: I "chciałbyś, aby skrypt" pomyślał ", że nie działa z TTY – Dogsbody

Odpowiedz

5

Możesz przekierować wyjście do cat (przy założeniu, że test skryptowy ma sys.stdout deskryptor pliku o wartości).

python myscript.py | cat 

a.py

import sys 
print sys.stdout.isatty() 

do testu:

> python a.py 
True 
> python a.py | cat 
False 
+3

Genialny! Działa to jak urok. Dziękuję Ci :-) – Dogsbody