كيفية تعيين متغيرات قذيفة في subprocess.popen (بطريقة أقل قبيحة ...)

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

سؤال

ملاحظة: هذا هو ليس نفس السؤال كما بيثون: المتغيرات الصغار المستمرة في المناطق الفرعية, ، نظرا لأن هذا السؤال هو في الواقع حول متغيرات البيئة، وليس متغيرات قذيفة.

أحاول أتمتة المعيار الأساسي الذي أفعله في CSH باستخدام شل المدمج time أمر. يمكنك تعديل إخراج time عن طريق تحديد المتغير من نفس الاسم في Shell مثل يلي:

set time=(1000000000 "%U %S %E %P %W %X %D %K %M %F %R %I %O %r %s %k %w %c")

ومع ذلك، هذا بالطبع ليس متغير بيئة، لذلك لا يمكنك تمريرها في env المعلمة في subprocess.Popen منشئ (حاولت ذلك أولا ...). أنت يمكن اختراقها معا من خلال الاعتداء (IMO، على أي حال) cmd حجة للقيام بذلك، ثم عملك الفعلي (تقصير لعرضه بشكل جيد):

time_cmd = 'set time=(1000000000 "%U %S %E %P %c"); time ./some_func'
p = subprocess.Popen(cmd, executable="/bin/csh", shell=True, ...)

وهذا يعمل كما تتوقع، لكن يبدو أنه ليس بالطريقة الصحيحة حقا (ويمكن أن يؤدي إلى بعض الرهيبة cmd البناء عندما تريد تعديل مجموعة من سلوكيات قذيفة مختلفة).

هل هناك أي طريقة أخرى لتعيين متغيرات قذيفة في subprocess بخلاف هذا kludge؟

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

المحلول

لديك عدد محدود من الخيارات للتواصل مع عملية الطفل (حجج الدعوة والبيئة والتدفقات). نظرا لأن إعداد متغير شل هو بمعنى أكثر عمومية تعديل الحالة الداخلية لعملية الطفل، فإن ما تسميه "Kludge" هو في الواقع معقول جدا. لا أعرف أي متغيرات CSH التي لها طريقة خاصة لتحميل متغيرات Shell.

ومع ذلك، يمكنك أن تنظف عن طريق كتابة جميع أوامر التبادلية الخاصة بك إلى Shell عبر أنبوب، أو حتى كتابةها إلى ملف ووضعها من قبل CSH source مدمج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top