Seite 1 von 1
Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 11:02
von api
Hallo,
gibt es eigentlich eine Möglichkeit, um in einem Python-Prg festzustellen, ob dieses von der Kommandozeile aus gestartet wurde?
Hintergrund meiner Frage ist, dass ich ein Python-Programm entweder direkt über die Kommandozeile aufrufen kann, aber ebenso aus einem anderen Programm heraus. Nun gibt es aber einen Parameter, der
nicht auf der Kommandozeile verwendet werden darf. Dieses "Vergehen" möchte ich in dem aufgerufenen Prg abfangen.

Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 11:34
von Hyperion
Kann ich mir nicht vorstellen; zudem klingt mir das nach einem Thema, das sicherlich nicht Betriebssystem unabhängig wäre. Insofern gibt es da wenn nur Speziallösungen durch umständliche Verränkungen.
Ich würde das einfach gut dokumentieren und mich darauf verlassen, dass der Benutzer die Anleitung liest.
Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 12:42
von api
@hyperion: Ja. Dokumentiert ist es - und alle Beteiligten wissen es eigentlich auch, aber so als letzte Absicherung wäre es recht gut gewesen, es im Prg abzufangen.
Ok. Es scheint - wie ich mir schon gedacht habe - nicht so einfach zu sein.
Danke dir trotzdem.
Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 12:57
von jbs
Ich versteh den Sinn nicht. Was willst du den verbieten?
Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 13:42
von b.esser-wisser
Reicht ein "sys.stdin.isatty()" (bzw. sys.stdout...) vielleicht schon?
Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 14:35
von api
@jbs: Der Sinn besteht darin, dass wenn der Aufruf des anderen Prgs aus einem bestimmten Prg geschieht, dieser Parameter dafür sorgt, dass Dateien überschrieben werden - also zB:
prg_name --browser --write_statistic
Der Parameter "--write_statistic" führt dazu, dass eine bestimmte Statistik geschrieben wird.
Da man dieses Prg aber auch von der Kommandozeile starten kann, und auf keinen Fall diese Statistik geschrieben werden darf, sollte unterbunden werden, dass es einen Aufruf wie diesen gibt:
prg_name --browser --write_statistic
Von der Kommandozeile ist nur erlaubt:
prg_name --browser
(bzw. alle Möglichkeiten ohne "--write_statistic")
@b.esser-wisser: Wie soll ich das verwenden? Das verstehe ich jetzt nicht..

Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 14:42
von Hyperion
@api: Na dann erstelle doch einfach zwei Wrapper-Scripte, die für den Stand-alone- und für den Embedded-Gebrauch angepasst sind. Letztlich ist der Effekt aber auch, dass man die Doku lesen muss
Vielleicht überflüssig aber dennoch mal der Hinweis: Falls möglich nutze doch nicht das ausführbare CLI-Script von einem anderen Programm aus, sondern das Modul. Damit wäre der Kommandozeilenparameter obsolet

Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 14:47
von mutetella
Vielleicht könnte eine Möglichkeit darin bestehen, dass Du beim Start Deines Programmes überprüfst, welche Prozesse/Programme gerade aktiv sind. Wenn das aufrufende Programm, das den --write_statistic Parameter übergeben darf, dabei ist, kann man davon ausgehen, dass der Programmstart auch von diesem initiiert wurde.
Ok, ist nur eine halbsichere Lösung, lässt sich natürlich leicht umgehen....
Mir fällt nix besseres ein, sorry...
Gruß
mutetella
Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 22:13
von Stephan256
Zumindest unter Linux könntest du mit os.environ die Umgebungsvariablen überprüfen ob z.B. die Variable PS1 gesetzt ist was darauf hindeutet, dass das Programm in einer Shell ausgeführt wird. Dies ist nicht unbedingt 100% zuverlässig.
Re: Prg von Kommandozeile gestartet?
Verfasst: Freitag 17. September 2010, 22:20
von cofi
Wird das andere Programm aber von einer Shell gestartet, vererbt es dann auch `PS1` weiter. Insofern sogar noch fragiler.
Ich denke du faehrst mit zwei Interfaces - wie von Hyperion vorgeschlagen - am besten.