2010-10-08 21 views
5

He intentado ejecutar este código desde el libro 'Python Standard Library' de 'Fred Lunde'.sustitución del subproceso de popen2 con Python

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() 

funciona bien con una advertencia de

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

Cómo traducir la función anterior con el subproceso? Intenté lo siguiente, pero no funciona.

from subprocess import * 

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

* algunos errores *? – SilentGhost

Respuesta

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

Dentro del módulo de multiprocesamiento hay un método llamado 'Pool', que podría ser perfecto para sus necesidades teniendo en cuenta que está planeando hacer una especie (no estoy seguro de lo enorme que los datos son, pero ...) .

Se ha optimizado a la cantidad de núcleos que tiene su sistema. es decir, solo se generan tantos procesos como el no. de núcleos. Por supuesto, esto es personalizable.

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 
Cuestiones relacionadas