我试图从'Fred Lunde'的“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()
它运行良好并带有
警告~/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 :(得分:10)
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)
答案 1 :(得分: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