ошибка python subprocess.call при передаче канала в файл

Я получаю обычную ошибку в python 3.4, когда я вызываю команду, скажем, net view в виде: subprocess.call("net view") возвращает error code 0 (т.е. успешно)

Но когда я делаю subprocess.call("net view > targets.txt"), он возвращает error code 1 (неудачно).

Почему эта ошибка появляется в python и есть ли способ передать вывод в файл аналогичным образом?


person DonD    schedule 04.04.2015    source источник


Ответы (1)


Самый простой способ сделать то, что вы хотите, — перенаправить stdout на файловый объект:

from subprocess import check_call
with open("targets.txt","w" ) as f:
    check_call(["net", "view"], stdout=f)

check_call вызовет ошибку для any non-zero статуса выхода.

person Padraic Cunningham    schedule 04.04.2015
comment
понял, молодец! - person DonD; 05.04.2015
comment
glas@DonD, не беспокойтесь, рад, что помогло - person Padraic Cunningham; 05.04.2015
comment
@DonD: причина возникновения ошибки в том, что > является оператором перенаправления оболочки. subprocess не создает оболочку, если вы явно не попросите об этом. Этот ответ показывает правильный способ перенаправления stdout дочернего процесса в файл (без использования оболочки). - person jfs; 05.04.2015