GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, die Umgebung eines übergeordneten Prozesses in Python zu ändern?

Ich würde die bash eval-Anweisung verwenden und das Python-Skript den Shell-Code ausgeben lassen

kind.py:

#!/usr/bin/env python
print 'FOO="A_Value"'

parent.sh

#!/bin/bash
eval `./child.py`

Es ist für keinen untergeordneten Prozess möglich, die Umgebung des übergeordneten Prozesses zu ändern. Das Beste, was Sie tun können, ist, Shell-Anweisungen an stdout auszugeben, die Sie dann als Quelle verwenden, oder sie in eine Datei zu schreiben, die Sie in der übergeordneten Datei als Quelle verwenden.


Kein Prozess kann seinen übergeordneten Prozess (oder die Umgebung eines anderen bestehenden Prozesses) ändern.

Sie können jedoch eine neue Umgebung erstellen, indem Sie eine neue interaktive Shell mit der modifizierten Umgebung erstellen.

Sie müssen eine neue Kopie der Shell erstellen, die die aktualisierte Umgebung verwendet und Zugriff auf die vorhandenen stdin, stdout und stderr hat und ihren Reinitialisierungstanz durchführt.

Sie müssen so etwas wie use subprocess.Popen tun, um /bin/bash -i auszuführen .

Die ursprüngliche Shell führt also Python aus, das eine neue Shell ausführt. Ja, Sie haben viele Prozesse am Laufen. Nein, es ist nicht so schlimm, weil die ursprüngliche Shell und Python nicht wirklich etwas tun, außer darauf zu warten, dass die Subshell fertig wird, damit sie auch sauber beendet werden können.


Linux
  1. Neuer übergeordneter Prozess, wenn der übergeordnete Prozess stirbt?

  2. Der Unterschied in der Verwendung zwischen Shell-Variablen und Umgebungsvariablen?

  3. CentOS / RHEL :So ändern Sie die Anmelde-Shell des Benutzers

  4. So ändern Sie die Standard-Shell in Linux

  5. So ändern Sie die Standard-Shell in Linux

So ändern Sie die GNOME-Shell-Schriftart

So ändern Sie die Priorität eines Prozesses in Linux

So ändern Sie die Standard-Shell im Linux-System

Wie ändere ich die Sprache meines Git?

Wie bekomme ich den PYTHONPATH in der Shell?

Wie kann man einen mit subprocess.check_output() erstellten Python-Kindprozess beenden, wenn der Elternteil stirbt?