我有一個檔案的 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 命令的方式可能存在語法錯誤。
有什么建議 ?
uj5u.com熱心網友回復:
此代碼似乎無需外部工具即可解決您的問題。
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())
uj5u.com熱心網友回復:
我會考慮在 python 中進行所有的閱讀和搜索,也許會重新考慮你想要實作的目標,但是:
在外殼中:
$ 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)
雖然有效,但解決方案是......不是我認為的干凈代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/369694.html
下一篇:將標準錯誤重定向到c中的檔案
