Не удается перенаправить вывод команды в файл

#python-2.7 #os.system

#python-2.7 #os.system

Вопрос:

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

Я пробовал с приведенным ниже, но это не работает

python pr.py >> pr.txt

  import os

 f=open("pr1.txt","r")
 df=0
 for i in f:

     df=df 1
     if df==4:
        break
     print i
     os.system("udstask expireimage -image"   i)
  

После выполнения «os.system(«udstask expireimage -image» i)» каждый раз при этом будет отображаться статус команды для файла

Комментарии:

1. Вы должны использовать один > AFAIK.

2. Пытался, но не перенаправляет 🙂

3. Можете ли вы вставить содержимое pr1.txt или оно полностью пустое … strange ? В моем случае это работает. >> для добавления amp; > переопределит содержимое (по умолчанию оба создают файл с первого раза, если он не существует).

4. Ниже приведен вывод, который я получаю [09:54:17] cse-cds2n1:/dumps/tmp # python /dumps/tmp/pr.py >> /dumps/tmp/asd.txt Изображение ACTERR-010016 не существует: Image_38317735 Изображение ACTERR-010016 не существует: Image_38317736 Изображение ACTERR-010016 не существует: Image_38318636

5. Так это содержимое pr1.txt ?

Ответ №1:

Вы могли бы попробовать что-то вроде :

 import os

f=open("pr1.txt","r")
 df=0
 for i in f:

     df=df 1
     if df==4:
        break
     print i
     os.system("udstask expireimage -image"   i   " > pr.txt")
  

Это перенаправило бы вывод команды на pr.txt.

Вы должны использовать subprocess вместо os.system , который имеет более эффективную обработку потока и дает вам больше контроля при вызове команды оболочки:

 import os
import subprocess

f=open("pr1.txt","r")
 df=0
 for i in f:

     df=df 1
     if df==4:
        break
     print i
     task = subprocess.Popen(["udstask expireimage -image"   i],stdout=subprocess.PIPE,shell=True)
     task_op = task.communicate()
     task.wait()
  

Теперь у вас есть ваши выходные данные, сохраненные в task_op , которые вы можете записать в файл или делать все, что пожелаете. Это в форме кортежа, и вам, возможно, потребуется написать только обязательную часть.