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())
我有一个文件的 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())