将unix命令输出重定向到python中的文件

时间:2015-04-19 11:34:04

标签: python unix pipe subprocess popen

import sys,re,os
from subprocess import Popen, PIPE, call


newCmd = 'diff -qr -b -B '+sys.argv[1]+' '+sys.argv[2]+' --exclude-from='+sys.argv[3]+' | grep pattern1\|pattrern2 > outputFile'

ouT,erR = Popen(newCmd, shell=True).communicate()
print ouT,erR

ouT和erR正在打印None, None,而outputFile是一个空白文件。

当我执行相同的' newCmd'在普通的shell中,它的执行正常

基本上,这里的意图是将shell命令的输出重定向到python中的文件。不同的方法(使用调用),没有什么可以帮助我

1 个答案:

答案 0 :(得分:0)

除非你真的需要分开stdout / stderr(根据你原来的帖子,你没有),一种方法是使用subprocess.check_output。它就像Popen,但捕获输出并将其作为字符串返回。之后你可以在python中操作输出(而不是使用'grep'),并将结果字符串写入你选择的文件中。

output_as_string = subprocess.check_output('dir', shell=True)
# i'll replace all "bananas" into "apples" just for demo purposes:
manip_output = output_as_string.replace('bananas', 'apples')

with open('yourfile.txt', 'w') as f:
    f.write(manip_output)