运行 子进程的最 pythonic 方法是什么将输出保存在变量中并将其加载到 pandas 数据框中
What is the most pythonic way to run subprocess save the output in a variable and load it into a pandas data frame
我很难做到这一点
# Save the bash process in a python variable
cmd='bedtools intersect -wao -b/path/file_a -a /path/file_b'
p=Popen(cmd,shell=True,stdin=PIPE,stdout=PIPE,stderr=STDOUT,close_fds=True)
output=p.stdout.read()
# Import this string that is a tsv
df=StringIO(output)
cnvs=pd.read_csv(df,
sep='\t',
index_col=False,
names=['#CHROM',
'START',
'END',
'CNV_TYPE'
'CNV ID',
'Chromosome_g'.
'Transcript_start_g',
'Transcript_end_g',
'Transcript_stable_ID_g',
'canonical_g',
'Gene stable_ID_g',
'Gene_name_g',
'amount_overlap_g'])
我一直在尝试从不同教程中找到的不同方法。现在我收到错误
TypeError:initial_value must be a str or None, not bites
不仅仅是修复错误我想知道这是否是这样做的方法。
最初我将 bash 命令的输出保存在一个文件中,然后将文件加载到 pandas。我不仅认为这不是最可悲的方式,而且我在 HPC 中工作,创建文件非常慢。
就我个人而言,我认为这不是特别不符合 pythonic。如果我有一个将 tsv 打印到 stdout 的命令,这或多或少是我会做的。要修复错误,请注意 stdout 是一个字节对象。因此,使用 BytesIO
而不是 StringIO
。 (此外,我会使用 with Popen(...) as p:
; 是 更像 Pythonic)
我很难做到这一点
# Save the bash process in a python variable
cmd='bedtools intersect -wao -b/path/file_a -a /path/file_b'
p=Popen(cmd,shell=True,stdin=PIPE,stdout=PIPE,stderr=STDOUT,close_fds=True)
output=p.stdout.read()
# Import this string that is a tsv
df=StringIO(output)
cnvs=pd.read_csv(df,
sep='\t',
index_col=False,
names=['#CHROM',
'START',
'END',
'CNV_TYPE'
'CNV ID',
'Chromosome_g'.
'Transcript_start_g',
'Transcript_end_g',
'Transcript_stable_ID_g',
'canonical_g',
'Gene stable_ID_g',
'Gene_name_g',
'amount_overlap_g'])
我一直在尝试从不同教程中找到的不同方法。现在我收到错误
TypeError:initial_value must be a str or None, not bites
不仅仅是修复错误我想知道这是否是这样做的方法。
最初我将 bash 命令的输出保存在一个文件中,然后将文件加载到 pandas。我不仅认为这不是最可悲的方式,而且我在 HPC 中工作,创建文件非常慢。
就我个人而言,我认为这不是特别不符合 pythonic。如果我有一个将 tsv 打印到 stdout 的命令,这或多或少是我会做的。要修复错误,请注意 stdout 是一个字节对象。因此,使用 BytesIO
而不是 StringIO
。 (此外,我会使用 with Popen(...) as p:
; 是 更像 Pythonic)