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

埃卡尔

当我运行以下代码

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

但不确定如何处理越来越复杂的情况。

有什么生产方法可以通过子流程获得预期结果?

帕德拉克·坎宁安

如建议的那样,您需要stdout=PIPE在第二个过程中删除以下内容中的单引号"'^>'"

gr = Popen(["grep", "^>", myfile], stdout=PIPE)
Popen(["sed", "s/.*len=//"], stdin=gr.stdout, stdout=PIPE)
......

但这可以简单地使用纯python和来完成re

import re
r = re.compile("^\>.*len=(.*)$")
with open("test.txt") as f:
    for line in f:
        m =  r.search(line)
        if m:
            print(m.group(1))

哪个会输出:

345
4523

如果以开头开头的行>始终带有数字,而之后的数字始终位于结尾,len=那么您实际上也不需要正则表达式:

with open("test.txt") as f:
    for line in f:
        if line.startswith(">"):
            print(line.rsplit("len=", 1)[1])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Python子进程时,为什么Ctrl-C不会产生与kill -2相同的行为?

来自分类Dev

如果创建,Python子进程stderr / stdout字段为None

来自分类Dev

子进程communication()的“是”报告错误

来自分类Dev

使用Python的子进程时的异常处理

来自分类Dev

进程及其子进程列表

来自分类Dev

监视python中子进程产生的进程数

来自分类Dev

(fork / waitpid)等待子进程列表,但每次子进程完成时都中断等待

来自分类Dev

获取由python子进程创建的文件列表

来自分类Dev

python子进程-分离进程

来自分类Dev

前导零的数字文字不会产生期望值

来自分类Dev

对 insmod 的 Python 子进程调用产生未定义的符号错误,它从 std shell 工作

来自分类Dev

当父级在python中退出时,如何杀死子进程?

来自分类Dev

使用python子进程获取硬件ID时出错

来自分类Dev

在Python中打开ffmpeg子进程时出错

来自分类Dev

从C子进程读取数据时Python挂起

来自分类Dev

读取输出时,Python子进程通信冻结

来自分类Dev

当期望列表仅包含单个元素时,获取列表元素的Python方法?

来自分类Dev

后台的Python子进程

来自分类Dev

python子进程死锁

来自分类Dev

python 3.4子进程

来自分类Dev

python子进程:FileNotFoundError

来自分类Dev

在python中遍历列表时如何删除None

来自分类Dev

ggplot在期望躲避图表时产生堆积的条形图

来自分类Dev

当应用程序退出时,不会终止以Python子进程模块启动的进程

来自分类Dev

在python中使用多进程时子进程将做什么

来自分类Dev

当在OS X上杀死Python进程时,为什么不杀死子进程呢?

来自分类Dev

当应用程序退出时,不会终止以Python子进程模块启动的进程

来自分类Dev

在python子进程模块中调用adb时如何防止后台进程的新实例

来自分类Dev

Python的多处理池产生新的进程

Related 相关文章

  1. 1

    使用Python子进程时,为什么Ctrl-C不会产生与kill -2相同的行为?

  2. 2

    如果创建,Python子进程stderr / stdout字段为None

  3. 3

    子进程communication()的“是”报告错误

  4. 4

    使用Python的子进程时的异常处理

  5. 5

    进程及其子进程列表

  6. 6

    监视python中子进程产生的进程数

  7. 7

    (fork / waitpid)等待子进程列表,但每次子进程完成时都中断等待

  8. 8

    获取由python子进程创建的文件列表

  9. 9

    python子进程-分离进程

  10. 10

    前导零的数字文字不会产生期望值

  11. 11

    对 insmod 的 Python 子进程调用产生未定义的符号错误,它从 std shell 工作

  12. 12

    当父级在python中退出时,如何杀死子进程?

  13. 13

    使用python子进程获取硬件ID时出错

  14. 14

    在Python中打开ffmpeg子进程时出错

  15. 15

    从C子进程读取数据时Python挂起

  16. 16

    读取输出时,Python子进程通信冻结

  17. 17

    当期望列表仅包含单个元素时,获取列表元素的Python方法?

  18. 18

    后台的Python子进程

  19. 19

    python子进程死锁

  20. 20

    python 3.4子进程

  21. 21

    python子进程:FileNotFoundError

  22. 22

    在python中遍历列表时如何删除None

  23. 23

    ggplot在期望躲避图表时产生堆积的条形图

  24. 24

    当应用程序退出时,不会终止以Python子进程模块启动的进程

  25. 25

    在python中使用多进程时子进程将做什么

  26. 26

    当在OS X上杀死Python进程时,为什么不杀死子进程呢?

  27. 27

    当应用程序退出时,不会终止以Python子进程模块启动的进程

  28. 28

    在python子进程模块中调用adb时如何防止后台进程的新实例

  29. 29

    Python的多处理池产生新的进程

热门标签

归档