如何在 Python 中存储 linux 调用的输出

How to store output from linux call in Python

我正在编写一个脚本来根据特定列对文件进行排序。为此,我尝试调用 'sort' Linux 命令。我使用的代码是:

from subprocess import 
path_store = /homes/varshith/maf
input = path_store
field = "-k2"
store_output_in_new_file = ">"
new_path = path_store + "_sort.bed"
sorting = Popen(["sort", field, input, append, new_path], stdout=PIPE)

但这不能正常工作。在此先感谢您的帮助。

使用通信获取输出:

from subprocess import PIPE,Popen
sorting = Popen(["sort", field, output, append, new_path], stdout=PIPE)
out, err = sorting.communicate()  
print out

或者对 python >= 2.7:

使用 check_output
sorting = check_output(["sort", field, output, append, new_path])

如果您只想写入排序后的内容,您可以将标准输出重定向到文件对象:

output = "path/to/parentfile"
cmd = "sort -k2 {}".format(output)
with open(new_file,"w") as f:
    sorting = Popen(cmd.split(),stdout=f)

首先,我希望 outputnew_path 实际上是字符串(我假设是这样,但从您发布的内容来看并不清楚)。但假设所有这些都已解决:

sorting = Popen(...)
sorting_output = sorting.communicate()[0]

应该将子进程的标准输出内容存储到sorting_output

要模拟 shell 命令:

$ sort -k2  /homes/varshith/maf > /homes/varshith/maf_sort.bed

即,按第 2 列对 /homes/varshith/maf 文件进行排序,并将排序后的输出存储到 Python 中的 /homes/varshith/maf_sort.bed 文件:

#!/usr/bin/env python
from subprocess import check_call

field = '-k2'
input_path  = '/homes/varshith/maf'
output_path = input_path + '_sort.bed'
with open(output_path, 'wb', 0) as output_file:
    check_call(["sort", field, input_path], stdout=output_file)

它会覆盖输出文件。要改为附加到文件,请使用 ab 模式而不是 wb.