【发布时间】:2022-01-05 20:17:02
【问题描述】:
我有一个用于文件的 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
task = subprocess.Popen(f"cat ${filename} |... 的第一行的开头尝试过(然后是该行的其余部分),您也使用了上面在 Python 中发布的文件名分配?你有机会在你的机器上使用 IPython 或 Jupyter 吗?在这些情况下,您可以使用更简单的选项将 bash 与 Python 混合。 -
引号还是不平衡。您必须使用
"\"转义内部"s。 -
这工作
task = subprocess.Popen(f"cat {filename}", shell=True,stdout=subprocess.PIPE)
标签: python python-3.x shell subprocess