Grep突然停了下来

时间:2014-10-01 15:32:51

标签: python grep subprocess popen

我正在尝试使用grep解析Python中的文件,但它始终停在同一行,我可以理解为什么。我尝试了三种不同的方式:

process = os.popen("grep -A1 "+name+" "+new_hairpins+" | grep -oE '.{0,6}"+seq+".{0,6}'")
results = process.readlines()
process.close()

然后

process = subprocess.Popen("grep -A1 "+name+" "+new_hairpins+" | grep -oE '.{0,6}"+seq+".{0,6}'",stdout=PIPE, stderr=PIPE, shell=True)
process.wait()
process_result = process.communicate()
results = filter(None, process_result[0].split("\n"))

并通过临时文件

os.system("grep -A1 "+name+" "+new_hairpins+" | grep -oE '.{0,6}"+seq+".{0,6}' > tmp.txt")
with open("tmp.txt","r") as f :
    results = f.readlines()

但脚本始终在同一行失败。 我在bash中直接手动尝试了这一行,它有效....!

这可能是grep的内存问题,我怎么能解决这个问题呢? 非常感谢!

2 个答案:

答案 0 :(得分:2)

您需要引用命令行参数,因为它们之间有空格:

"grep -A1 '"+name+" "+new_hairpins+"' | grep ....
          ^                         ^

否则,namenew_hairpins将被视为单独的参数。

答案 1 :(得分:0)

我终于找到了问题:我的错!

我意识到我在grep中使用的文件new_hairpins以及之前在代码中生成的文件并没有被.close()....

关闭。

由于它正在研究1879年的第一行,我并不认为问题可能来自这个文件...

无论如何,谢谢你的帮助!