[Python-Leipzig] Process hierarchy

Stefan Schwarzer sschwarzer at sschwarzer.net
Sa Nov 14 14:37:34 UTC 2009


Hallo Volker,

On 2009-11-13 20:58, Dr. Volker Jaenisch wrote:
> Stefan Schwarzer schrieb:
>> Vielleicht lässt sich das Problem auf einem anderen Weg
>> leichter angehen. Eine Frage in diese Richtung: _Warum_
>> willst du den Aufruf per Kommandozeile von anderen Aufrufen
>> unterscheiden?
>>   
> Das Sript wird mal vom Administrator und mal von Heartbeat
> (fail-over-software) gestartet. Heartbeat orientiert sich
> an OCF-Return-Codes und nach STD-Out/Error geschriebenen
> Status-Infos. Ein Admin aber will eher Menschenlesbaren
> output.
> 
> Daher soll in dem Falle wo das Script _NICHT_ von
> Heartbeat gestartet wird eine menschenlesbare Message
> ausgegeben werden. Im Fall wo von Heartbeat gestartet darf
> diese MEndung natürlich nicht ausgegeben werden, da das
> Heartbeat nicht toleriert.

Folgendes fällt mir dazu ein:

- Du könntest mit os.isatty unterscheiden, ob die
  Standardeingabe ein Terminal ist. Dieser Test ist aber
  auch negativ, wenn die Eingabe von einer Pipe kommt.

- Du kannst durch einen Kommandozeilenschalter (z. B. -i
  oder --interactive) eine andere Ausgabe erzeugen. Das
  fände ich das Naheliegendste und Transparenteste. Die
  Auswertung der Kommandozeile mit dem optparse-Modul ist
  recht einfach.

- Wenn du wirklich identische Aufrufsyntax haben möchtest,
  kannst du das Ausgabeformat auch über eine Umgebungs-
  variable steuern, die du mit os.environ[variable] abfragen
  kannst.

Meine Präferenzen wären, in dieser Reihenfolge, der
Kommandozeilenschalter (nach dem Python-Motto "explicit is
better than implicit"), dann die Umgebungsvariable. Die
Abfrage nach tty und erst recht ein Gewurschtel mit
Prozess-Ids finde ich nicht gerade transparent. Ich denke,
es ist praktisch, wenn man das unterschiedliche Verhalten
eines Skripts auch nach einem Jahr noch nachvollziehen kann,
ohne in den Code zu schauen, erst recht, wenn jemand anders
außer dir später versuchen soll, das unterschiedliche
Verhalten nachzuvollziehen. ;-)

Wenn es nur darum geht, Schreibarbeit in der Shell zu
sparen, kannst du den Kommandozeilenschalter mit einer
Alias-Definition, z. B. in der .bashrc, kombinieren:

  alias check='check --interactive'

oder noch besser ohne Umdefinieren des Namens:

  alias ci='check --interactive'

Viele Grüße
Stefan



Mehr Informationen über die Mailingliste Python-Leipzig