栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用Python的Popen替代Bash风格的流程

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Python的Popen替代Bash风格的流程

如果将约定

pram_axdnull
理解
"-"
为:“从stdin中读取”,则可以:

p = Popen(["pram_axdnull", str(kmer), input_filename, "-"],          stdin=PIPE, stdout=PIPE)output = p.communicate(generate_kmers(3))[0]

如果输入是由外部过程生成的:

kmer_proc = Popen(["generate_kmers", str(kmer)], stdout=PIPE)p = Popen(["pram_axdnull", str(kmer), input_filename, "-"],          stdin=kmer_proc.stdout, stdout=PIPE)kmer_proc.stdout.close()output = p.communicate()[0]

如果

pram_axdnull
明白
"-"
的约定:

import osimport tempfilefrom subprocess import check_outputwith tempfile.NamedTemporaryFile() as file:    file.write(generate_kmers(3))    file.delete = Falsetry:    p = Popen(["pram_axdnull", str(kmer), input_filename, file.name],   stdout=PIPE)    output = p.communicate()[0]    # or    # output = check_output(["pram_axdnull", str(kmer), input_filename,        file.name])finally:    os.remove(file.name)

要使用外部过程生成临时文件:

from subprocess import check_callwith tempfile.NamedTemporaryFile() as file:    check_call(["generate_kmers", str(kmer)], stdout=file)    file.delete = False

为了避免等待所有kmers生成,即同时写入/读取kmers,可以

os.mkfifo()
在Unix上使用(由@cdarke建议):

import osimport shutilimport tempfilefrom contextlib import contextmanagerfrom subprocess import Popen, PIPE@contextmanagerdef named_pipe():    dirname = tempfile.mkdtemp()    try:        path = os.path.join(dirname, 'named_pipe')        os.mkfifo(path)        yield path    finally:        shutil.rmtree(dirname)with named_pipe() as path:    p = Popen(["pram_axdnull", str(kmer), input_filename, path],   stdout=PIPE) # read from path    with open(path, 'wb') as wpipe:        kmer_proc = Popen(["generate_kmers", str(kmer)],    stdout=wpipe) # write to path    output = p.communicate()[0]    kmer_proc.wait()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号