كيفية تعيين متغيرات قذيفة في subprocess.popen (بطريقة أقل قبيحة ...)
-
12-09-2019 - |
سؤال
ملاحظة: هذا هو ليس نفس السؤال كما بيثون: المتغيرات الصغار المستمرة في المناطق الفرعية, ، نظرا لأن هذا السؤال هو في الواقع حول متغيرات البيئة، وليس متغيرات قذيفة.
أحاول أتمتة المعيار الأساسي الذي أفعله في 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
مدمج.