2014-10-02 3 views
0

У меня возникли проблемы с функцией вызоваsubprocess.call() проблемы с помощью «>»

Я пытаюсь перенаправить вывод программы в текстовый файл, используя «>»

Это то, что я пробовал:

import subprocess 

subprocess.call(["python3", "test.py", ">", "file.txt"]) 

, но он по-прежнему отображает вывод в командной строке, а не в текстовом файле

+1

Перенаправление с помощью '>' - это функция оболочки, но при вызове 'call' она не порождает оболочку, а выполняет программу, передавая ей любые оставшиеся строки в качестве аргументов. – 5gon12eder

+1

Этот вопрос задается довольно часто. [Здесь] (https://stackoverflow.com/questions/25496364/python-subprocess-call-function-does-not-redirect-output) является родственным, и я помню, что видел больше такого рода в последние несколько недель , – 5gon12eder

ответ

3

есть два подхода к решению этого.

  1. Have питон обрабатывать Перенаправление:

    with open('file.txt', 'w') as f: 
        subprocess.call(["python3", "test.py"], stdout=f) 
    
  2. Have перенаправлению оболочки ручки:

    subprocess.call(["python3 test.py >file.txt"], shell=True) 
    

Как правило, первый является предпочтительным, поскольку он позволяет избежать капризов оболочки.

Наконец, вы должны изучить возможность того, что test.py может работать как импортированный модуль, а не звонить через subprocess. Python спроектирован так, что легко писать сценарии, так что одна и та же функциональность доступна либо в командной строке (python3 test.py), либо в виде модуля (import test).

Смежные вопросы