当前位置:  开发笔记 > 编程语言 > 正文

当预期数字列表时,Python子进程communic()产生None

如何解决《当预期数字列表时,Python子进程communic()产生None》经验,为你挑选了0个好方法。

当我运行以下代码时

from subprocess import call, check_output, Popen, PIPE

gr = Popen(["grep", "'^>'", myfile], stdout=PIPE)
sd = Popen(["sed", "s/.*len=//"], stdin=gr.stdout)
gr.stdout.close()
out = sd.communicate()[0]
print out

myfile看起来像这样:

>name len=345
sometexthere
>name2 len=4523
someothertexthere
...
...

我明白了

None

当预期输出是数字列表时:

345
4523
...
...

我在终端运行的相应命令是

grep "^>" myfile | sed "s/.*len=//" > outfile

到目前为止,我已经尝试过以不同的方式进行转义和引用,例如在sed中转义斜线或为grep添加额外的引号,但是组合的可能性很大.

我也考虑过在文件中读取并编写grep和sed的Python等价物,但文件非常大(我总是可以逐行读取),它总是在基于UNIX的系统上运行,我仍然很好奇我犯错的地方.

可能是那样的

sd.communicate()[0]

返回某种类型的对象(而不是整数列表)?

我知道在简单的情况下我可以使用check_output获取输出:

sam = check_output(["samn", "stats", myfile])

但不确定如何让它在更复杂的情况下工作,因为东西正在被管道输送.

有哪些有效的方法可以通过子流程获得预期的结果?

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有