هل من الممكن لتغيير البيئة من عملية الأصل في بيثون؟

StackOverflow https://stackoverflow.com/questions/263005

  •  06-07-2019
  •  | 
  •  

سؤال

في لينكس عندما تحتج الثعبان من قذيفة أنه يعيد بيئتها، ويبدأ عملية الثعبان. لذلك إذا كنت تفعل شيء كما يلي:

import os
os.environ["FOO"] = "A_Value"

وعندما يعود عملية الثعبان، فو، على افتراض أنه كان غير معروف أصلا، ستظل غير معروف. هل هناك طريقة لعملية الثعبان (أو أي عملية طفل) لتعديل بيئة عملية الأم؟

وأنا أعلم أنك عادة حل هذه المشكلة باستخدام شيء من هذا القبيل

source script_name.sh

ولكن هذا يتعارض مع المتطلبات الأخرى لدي.

هل كانت مفيدة؟

المحلول

ولا عملية يمكن أن يتغير عملية الأصل (أو أي بيئة أخرى العملية الحالية ').

ويمكنك، ومع ذلك، وخلق بيئة جديدة من خلال خلق قذيفة تفاعلية جديدة مع البيئة تعديلها.

وعليك أن تفرخ نسخة جديدة من قذيفة يستخدم البيئة ورفع مستواها والوصول إلى ستدين، المعياري وستدير القائمة، ويفعل الرقص reinitialization لها.

ما عليك القيام به شيء من هذا القبيل subprocess.Popen استخدام لتشغيل /bin/bash -i.

وهكذا تشغيل قذيفة الأصلي بيثون، الذي يدير قذيفة جديدة. نعم، لديك الكثير من عمليات التشغيل. أي انها ليست سيئة للغاية بسبب قذيفة الأصلي وبيثون لا تفعل أي شيء في الواقع إلا انتظار المستوى الفرعي لإنهاء حتى يتمكنوا من الخروج نظيفة، أيضا.

نصائح أخرى

وليس من الممكن لأي عملية طفل، لتغيير بيئة عملية الأصل. أفضل ما يمكن أن نفعله هو أن بيانات الناتج قذيفة إلى المعياري أنك ثم المصدر، أو الكتابة إلى الملف الذي قمت مصدر في الأصل.

وأود أن استخدام عبارة باش حدة التقييم، ويكون إخراج البرنامج النصي الثعبان رمز قذيفة

وchild.py:

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

وparent.sh

#!/bin/bash
eval `./child.py`
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top