2011-09-28 4 views
7

मेरे पास विंडोज और लिनक्स दोनों के तहत परीक्षण सूट निष्पादित करने के लिए सरल पायथन स्क्रिप्ट है। प्रत्येक परीक्षण अपने आउटपुट को अलग फ़ाइल में लिखता है। मैं subprocess.Popen कक्षा का उपयोग चक्र में खोल कमांड निष्पादित करने के लिए करता हूं। ऐसे हीपायथन subprocess.Popen और asynchronous आउटपुट

हर शेल कमांड शुरू होता है:

def system_execute(self, command, path, out_file): 
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file) 
    f = open(file_path, "w") 
    subprocess.Popen(params_list, stdout=f) 
    f.close() 

यह ठीक काम करता है, लेकिन स्क्रिप्ट अपना काम से पहले सभी उत्पादन फ़ाइलों में लिखा गया है खत्म। असल में, मुझे सैकड़ों शून्य-आकार की फ़ाइलें मिल रही हैं, और लेखन आउटपुट और करीबी हैंडल को समाप्त करने में कुछ समय लगता है। क्या कोई इस कारण को समझा सकता है कि यह इतना अजीब क्यों काम करता है, और क्या एक ही काम करने का एक तुल्यकालिक तरीका है?

धन्यवाद

उत्तर

15

f.close() से पहले, आप हमारे उपप्रक्रिया के लिए wait() किया है।

def system_execute(self, command, path, out_file): 
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file) 
    f = open(file_path, "w") 
    sp = subprocess.Popen(params_list, stdout=f) 
    sp.wait() 
    f.close() 

या सिर्फ

def system_execute(self, command, path, out_file): 
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file) 
    f = open(file_path, "w") 
    subprocess.call(params_list, stdout=f) 
    f.close() 

(या आसान फ़ाइल से निपटने के लिए,,

[...] 
    with open(file_path, "w") as f: 
     subprocess.call(params_list, stdout=f) 
+0

धन्यवाद, यह काम करता है –