如何将python的subprocess.Call方法输出重定向到文件而不是控制台?

时间:2011-09-23 17:00:01

标签: python sql-loader subprocess

我在子进程模块中使用python的Call方法来执行sqlldr命令

from subprocess import call

retcode = call([self.COMMAND, self.CONNECTION_STRING, "control=" +self.CONTROL_FILE, 
            "log="+self.TEMP_LOG_FILE, self.MODE , "data="+loadfile])

当我运行上面的脚本时,sqlldr命令的输出被打印到控制台,我想重定向到一个文件或忽略它。因为sqlldr也写入指定的日志。

我试过这样的事情,将输出重定向到一个文件,但在这一行抛出错误

retcode = call([self.COMMAND, self.CONNECTION_STRING, "control=" +self.CONTROL_FILE, 
            "log="+self.TEMP_LOG_FILE, self.MODE , "data="+loadfile, "> discard.log"])

如何实现这个目标?

1 个答案:

答案 0 :(得分:2)

打开要写入的文件,并将其作为subprocess.call的stdout关键字参数传递:

with open('stdout.txt', 'wb') as out:
  subprocess.call(['ls', '-l'], stdout=out)

subprocess.call接受与subprocess.Popen构造函数相同的参数。)