2010-10-08 8 views
5

के साथ popen2 के उपप्रोसेस प्रतिस्थापन मैंने इस कोड को 'फ्रेड लुंडे' की पुस्तक 'पायथन स्टैंडर्ड लाइब्रेरी' से चलाने का प्रयास किया।पायथन

import popen2, string 

fin, fout = popen2.popen2("sort") 

fout.write("foo\n") 
fout.write("bar\n") 
fout.close() 

print fin.readline(), 
print fin.readline(), 
fin.close() 

यह

 
~/python_standard_library_oreilly_lunde/scripts/popen2-example-1.py:1: 
DeprecationWarning: The popen2 module is deprecated. Use the subprocess module. 

की चेतावनी कैसे उपप्रक्रिया के साथ पिछले समारोह का अनुवाद करने के साथ अच्छी तरह से चलाता है? मैंने निम्नानुसार कोशिश की, लेकिन यह काम नहीं करता है।

from subprocess import * 

p = Popen("sort", shell=True, stdin=PIPE, stdout=PIPE, close_fds=True) 
p.stdin("foo\n")    #p.stdin("bar\n") 
+0

* कुछ त्रुटियां *? – SilentGhost

उत्तर

9
import subprocess 
proc=subprocess.Popen(['sort'],stdin=subprocess.PIPE,stdout=subprocess.PIPE) 
proc.stdin.write('foo\n') 
proc.stdin.write('bar\n') 
out,err=proc.communicate() 
print(out) 
0

बहु मॉड्यूल के भीतर एक विधि 'पूल' कहा जाता है जो आप तरह करने की योजना बना रहे हैं पर विचार अपनी आवश्यकताओं के लिए एकदम सही हो सकता है नहीं है (यकीन नहीं कैसे बड़ा डेटा है, लेकिन ...) ।

यह आपके सिस्टम के कोर की संख्या के लिए स्वयं को अनुकूलित करता है। यानी केवल उतनी ही प्रक्रियाएं संख्या के रूप में उत्पन्न होती हैं। अवश्य ही। बेशक यह अनुकूलन योग्य है।

from multiprocessing import Pool 

def main(): 
    po = Pool() 
    po.apply_async(sort_fn, (any_args,), callback=save_data) 
    po.close() 
    po.join() 
    return 

def sort_fn(any_args): 
    #do whatever it is that you want to do in a separate process. 
    return data 

def save_data(data): 
    #data is a object. Store it in a file, mysql or... 
    return