Python subprocess() 正在读取 bash 中的文件

Python subprocess() reading file in bash

我有一个文件的 shell 命令,如下所示:

filename="/4_illumina/gt_seq/gt_seq_proccessor/200804_MN01111_0025_A000H35TCJ/fastq_files/raw_data/200804_MN01111_0025_A000H35TCJ.demultiplex.log"

assembled_reads=$(cat $filename | grep -i " Assembled reads ...................:" | grep -v "Assembled reads file...............:")

现在我正尝试 运行 在 python 环境中使用子进程作为:

task = subprocess.Popen("cat $filename | grep -i " Assembled reads ...................:" | grep -v "Assembled reads file...............:"", shell=True, stdout=subprocess.PIPE)
p_stdout = task.stdout.read()
print (p_stdout)

这不起作用,因为我无法解析从 python 到 shell 的文件名变量,而且我编写 grep 命令的方式可能存在语法错误。

有什么建议吗?

我会考虑在 python 中进行所有阅读和搜索,并且可能会重新考虑您想要实现的目标,但是:

在shell中:

$ export filename=/tmp/x-output.GOtV 

在 Python 中(注意访问 $filename 并在命令中混合引号,我还使用自定义 grep 命令来稍微简化一下):

import os
import subprocess
tmp = subprocess.Popen(f"cat {os.environ['filename']} | grep -i 'x'", shell=True, stdout=subprocess.PIPE)
data = tmp.stdout.read()
print(data)

虽然有效,但解决方案是......不是我认为的干净代码。

此代码似乎无需外部工具即可解决您的问题。

filename="/4_illumina/gt_seq/gt_seq_proccessor/200804_MN01111_0025_A000H35TCJ/fastq_files/raw_data/200804_MN01111_0025_A000H35TCJ.demultiplex.log"
for line in open(filename):
    if "Assembled reads" in line and "Assembled reads file" not in line:
        print(line.rstrip())