كيفية تشغيل وتشغيل البرنامج النصي الخارجي في الخلفية؟[ينسخ]
-
05-07-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
- كيف تبدأ عملية الخلفية في بايثون؟ 7 إجابات
لقد جربت هاتين الطريقتين:
os.system("python test.py")
subprocess.Popen("python test.py", shell=True)
يحتاج كلا الأسلوبين إلى الانتظار حتى انتهاء test.py مما يمنع العملية الرئيسية.أعلم أن "nohup" يمكنه القيام بهذه المهمة.هل هناك طريقة بايثون لتشغيل test.py أو أي نصوص برمجية أخرى وتركها تعمل في الخلفية؟
لنفترض أن test.py يشبه هذا:
for i in range(0, 1000000):
print i
سيقوم كل من os.system() أو subprocess.Popen() بحظر البرنامج الرئيسي حتى يتم عرض 1000000 سطر من الإخراج.ما أريده هو السماح لـ test.py بالعمل بصمت وعرض مخرجات البرنامج الرئيسي فقط.قد يتوقف البرنامج الرئيسي أثناء استمرار تشغيل test.py.
المحلول
subprocess.Popen(["python", "test.py"])
يجب أن تعمل.
لاحظ أن المهمة قد تستمر في التوقف عند خروج البرنامج النصي الرئيسي.في هذه الحالة، حاول subprocess.Popen(["nohup", "python", "test.py"])
نصائح أخرى
os.spawnlp(os.P_NOWAIT, "path_to_test.py", "test.py")
لا تنتمي إلى StackOverflow