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中的文件。不同的方法(使用调用),没有什么可以帮助我
答案 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)