2017-05-22 6 views
0

Ich möchte die print-Anweisungen meiner Ausgabe in eine Textdatei umleiten. Ich habe die sys importiert und unten versucht.Stdout in eine Textdatei in Python umleiten?

import pprint 
import os 
import math 
import sys 

class ExportLimits(object): 
    MMAP_ITER_TRIPS = 'manpower_mappings.map_iterator_trips' 

def __init__(self, workset, crew_type, bid_period, divisor_files=None): 
    log_file = "/opt/test/test_user/data/ESR_DATA/etab/slogfile.txt" 
    sys.stdout = open(log_file, 'w') 
    self.workset = workset 
    self.crew_type = crew_type 
    self.bid_period = bid_period 
    self.tm = workset.getTM() 
    self.crew_bid_period = self.crew_type + "+" + self.bid_period 
    self.bid_period = self.tm.table('qf_user_bid_period')[(self.crew_bid_period)] 
    self.period = Period(self.bid_period.bpstart, self.bid_period.bpend) 
    self.filter_matcher = self._get_filter_matcher() 
    self.iterator_trips = rave_api.eval(\ 
      ExportLimits.MMAP_ITER_TRIPS)[0] 
    self.divisor_reader_lh = divisor_reader_lh.DivisorReader(\ 
      divisor_files=divisor_files) 
    self.divisor_reader_sh = divisor_reader_sh.DivisorReader(\ 
      divisor_files=divisor_files) 
    self.pp_start = self.period.getStart() 
    self.pp_end = self.period.getEnd() 

def export_limits(self, item_type): 
    if item_type == 'DKSH': 
     self._mandays_limits(SLKHH_GROUPS) 
    else: 
     self._mandays_limits(LAJSDLH_GROUPS) 
def _mandays_limits(self, groups): 
    crews = [self.tm.table('crew')[('99172447',)], 
      self.tm.table('crew')[('7654678',)]] 
    generator = ((crew, self.filter_matcher.getFilterNamePeriodsMap(crew.id)) 
       for crew in self.tm.table('crew')) 

    minres = defaultdict(lambda :RelTime(0)) 
    maxres = defaultdict(lambda :RelTime(0)) 

    for crew, group_to_periods in generator: 
     print crew, group_to_periods 
     try: 
     crew_filter, period = group_to_periods.iteritems().next() 
     except StopIteration: 
     continue 
     if crew_filter not in groups: 
     continue 

Es funktioniert teilweise für mich. Ich kann einige der Zeilen drucken, aber nicht vollständig. Hier finden Sie die untenstehende Ausgabe meiner Protokolldatei, in der nur weniger Zeilen gedruckt wurden, aber nicht die vollständigen Protokolle. Aus irgendeinem Grund wurde es nicht vollständig gedruckt. (Bitte beachten Sie die letzte Zeile der Protokolldatei, wobei es nur bis "alia" gedruckt.)

Log File:

Crew _id = "133245" id = "176543" empno = "8761890" sex = "M" birthday = "19681217" name = "MICHEAL" Vornamen = "LUCAS" maincat = "C" Vorzugsname = "ESWAR" Initialen = "LL" joindate = "20010910 00:00" comjoindate = "20010910 00 : 00" _void = "title, logname, Si, bcity, bState, bcountry, alias, comenddate" { 'X-SYD-BB-AUSLLH': [26JUN2017 00: 00-21AUG2017 00.00]}

Besatzung _id = "214141" id = "132451" em pno = "145432" sex = "M" birthday = "19630904" name = "ESWARF" vorname = "FJDJSK" maincat = "C" Vorzugsname = "ESWADF" Initialen = "WL" joindate = "20010910 00:00" comjoindate = "20010910 00:00" _void = "title, logname, si, bcity, bState, bcountry, alia

~
~

Bitte überprüfen und beraten.

+1

Überprüfen Sie das Python-Logging-Modul! https://docs.python.org/3/library/logging.html – caffreyd

+0

Haben Sie versucht, das Pufferungsargument in 'open' zu berühren? https://docs.python.org/3/library/functions.html#open – grovina

+0

@grovina: Ich habe das Pufferungsargument nicht versucht. Ich kann es versuchen und dich eine Weile wissen lassen. – rawse

Antwort

0

Statt sys.stdout Sie verwenden können schreiben wie:

output_file = open(log_file, 'w') 

output_file.write('testing asdasdfsd') 

Oder wenn Sie alle Arten von Druckwert in Log-Datei zu schreiben, dann:

output_file = open (log_file, ‚w ‚)

sys.stdout = output_file

, die es ist.

Verwandte Themen