سؤال

أركض بيثون 2.5 على Windows، وفي مكان ما في التعليمات البرمجية لدي

subprocess.Popen("taskkill /PID " + str(p.pid))

لقتل أي نافذة بواسطة PID. المشكلة هي أنه بدون إعداد الأنابيب باللون البرمجي، ما زلت أحصل على الإخراج إلى وحدة التحكم - النجاح: تم إنهاء العملية مع PID 2068. لقد قمت بتصحيحها لإيجادها في subprocess.py، ولكن لا يمكن أن تذهب من هناك.

أي شخص يعرف كيفية تعطيل هذا؟

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

المحلول

fh = open("NUL","w")
subprocess.Popen("taskkill /PID " + str(p.pid), stdout = fh, stderr = fh)
fh.close()

نصائح أخرى

import os
from subprocess import check_call, STDOUT

DEVNULL = open(os.devnull, 'wb')
try:
    check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
finally:
    DEVNULL.close()

أنا دائما تمر في tuples إلى subprocess لأنه ينقذني القلق بشأن الهروب. Check_Call يضمن (أ) انتهت البرنامج الفرعي قبل يغلق الأنبوب و (ب) عدم تجاهل الفشل في العملية المسماة. أخيرا، os.devnull هو المعيار، وسيلة عبر منصة للقول NUL في بيثون 2.4+.

لاحظ أنه في PY3K، يوفر Subprocess DevNull من أجلك، حتى تتمكن من الكتابة فقط:

from subprocess import check_call, DEVNULL, STDOUT

check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top