Как перенаправить вывод методов subprocess.Call Python в файл, а не консоль? - PullRequest
1 голос
/ 23 сентября 2011

Я использую метод вызова Python в модуле подпроцесса для выполнения команды 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 голосов
/ 23 сентября 2011

Откройте файл для записи и передайте его в качестве аргумента ключевого слова stdout subprocess.call:

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

(subprocess.call принимает те же аргументы, что и конструктор subprocess.Popen.)

...