GNU/Linux >> Tutoriels Linux >  >> Linux

Est-il possible de changer l'environnement d'un processus parent en Python ?

J'utiliserais l'instruction bash eval et le script python produirait le code shell

enfant.py :

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

parent.sh

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

Il n'est pas possible, pour un processus enfant, de modifier l'environnement du processus parent. Le mieux que vous puissiez faire est de générer des instructions shell sur stdout que vous sourcez ensuite, ou de les écrire dans un fichier que vous sourcez dans le parent.


Aucun processus ne peut modifier son processus parent (ou tout autre environnement de processus existant).

Vous pouvez cependant créer un nouvel environnement en créant un nouveau shell interactif avec l'environnement modifié.

Vous devez générer une nouvelle copie du shell qui utilise l'environnement mis à niveau et a accès aux stdin, stdout et stderr existants, et effectue sa danse de réinitialisation.

Vous devez faire quelque chose comme use subprocess.Popen pour exécuter /bin/bash -i .

Ainsi, le shell d'origine exécute Python, qui exécute un nouveau shell. Oui, vous avez beaucoup de processus en cours d'exécution. Non, ce n'est pas trop grave car le shell d'origine et Python ne font rien d'autre que d'attendre que le sous-shell se termine pour qu'ils puissent également se terminer proprement.


Linux
  1. Nouveau processus parent lorsque le processus parent meurt ?

  2. La différence d'utilisation entre les variables shell et les variables d'environnement ?

  3. Changer l'environnement d'un processus en cours ?

  4. CentOS / RHEL :Comment changer le shell de connexion de l'utilisateur

  5. UNIX / Linux :Comment changer la gentillesse (priorité) d'un processus

Comment changer la police du shell GNOME

Comment changer la priorité d'un processus sous Linux

Comment changer le shell par défaut dans le système Linux

Comment définir le répertoire de travail du processus parent ?

Comment obtenir le PYTHONPATH en shell?

Le processus init peut-il être un script shell sous Linux ?