هل ستدعم البرامج النصية التي تم استدعاءها من Python بعد انتهاء صلصة Python؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

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

في هذه المرحلة، يطلق عليهم شيئا مثل هذا:

def runcmd(str, sleep):
    debug('Inside runcmd, executing: ' + str)
    os.chdir("/new/dir/")
    directory = os.getcwd()
    print 'current dir: '+ directory
    os.system(str)

t = threading.Thread(
        target=runcmd,
        args=( cmd, 50,)
    )
هل كانت مفيدة؟

المحلول

سوف يموت مؤشرات المياه بيثون مع بيثون. أيضا، نظام Os.SySystem هو الحظر. ولكن هذا ما يرام - إذا كان الأمر الذي يقوم به الأمر الذي يعمل بنظام OS.SyS () تقوم بإطلاق عملية جديدة (ولكن ليس عملية تابعة)، فكلها ستكون على ما يرام. على Windows، على سبيل المثال، إذا بدأ الأمر ب "ابدأ" ستبقى عملية "البدء" "بعد أن يموت Python.

تعديل: nohup هو ما يعادل start على لينكس. (بفضل S. Lott).

نصائح أخرى

os.system() لا يعود حتى انتهت العملية التي يطلقها. يستخدم subprocess أو Runtime.exec() إذا كنت تريد ذلك في عملية منفصلة.

أتساءل عما إذا كنت تستخدم Subprocess.Popen ستعمل بشكل أفضل بالنسبة لك.

ربما تفعل شيئا مثل قذيفة = صحيح

لن تعمل المواضيع لأنها جزء من العملية. ال system لن تعمل المكالمة لأنها تتنفذ كعملتك الجديدة.

سوف تحتاج إلى استخدام شيء مثل os.fork() لتفرخ عملية جديدة وتنفيذها في العملية الجديدة. إلقاء نظرة على subprocess. لبعض حلول أسلوب كتاب الطبخ الجيد لهذا.

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

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