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

1 投票
1 回答
1908 浏览
提问于 2025-04-17 02:57

我正在使用Python的subprocess模块中的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 个回答

2

打开一个文件用于写入,然后把这个文件作为 subprocess.call 的 stdout 参数传入:

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

(subprocess.call 接受的参数和 subprocess.Popen 的构造函数是一样的。)

撰写回答