2015-05-02 1 views
0
программы

Python не будет писать всю информацию .txt, но он будет к оболочкепрограммы Python не будет писать всю информацию .txt, но это будет оболочка

from time import sleep 
import platform, os, sys 
log = open("reportLog.txt", "w") 
log.write("####REPORT####\n") 


try: 
    sys =("SYS: " + platform.system()+ ("\n")) 
    syslog = log.write(sys) 
    syslog() 
except: 
    pass 
try: 
    os = ("OS: " + platform.os()+ ("\n")) 
    oslog = log.write(os) 
    oslog() 

except: 
    pass 
try: 
    platform = ("PLATFORM: "+ platform.platform()+ ("\n")) 
    platoformlog = log.write(platform) 
    platofrmlog() 
except: 
    pass 
try: 
    mac_ver("MAC_VER: " + platform.mac_ver()+ ("\n")) 
    mac_verlog = log.write(mac_ver) 
    mac_verlog() 
except: 
    pass 
try: 
    dist =("DIST: " + platform.dist()+ ("\n")) 
    distlog = log.write(dist) 
    distlog() 
except: 
    pass 
try: 
    node = ("NODE: " + platform.node()+ ("\n")) 
    nodelog = log.write(node) 
    nodelog() 
except: 
    pass 
try: 
    arch =("ARCHITECTURE: " + platform.architecture()+ ("\n")) 
    archlog = log.write(arch) 
    archlog() 
except: 
    pass 
try: 
    machine =("MACHINE: " + platform.machine() + ("\n")) 
    machinelog = log.write(machine) 
    machinelog() 
except: 
    pass 
try: 
    cpu =("CPU: " + platform.processor() + ("\n")) 
    cpulog = log.write(cpu) 
    cpulog() 

except: 
    pass 
log.write("##########") 
log.close() 
+0

Добро пожаловать. Не могли бы вы разместить содержимое файла в вопросе, или он полностью пуст? См. [Ask]. – mins

+0

Спасибо всем за это, довольно устал при написании этого кода, приветствует парней :) – Hobnob

+0

Привет @Hobnob. Если один из ответов ниже решил вашу проблему, пожалуйста, рассмотрите [принятие этого] (http://meta.stackexchange.com/q/5234/179419), нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – Lafexlos

ответ

2

проблемы с вашим кодом являются:

  1. вы повторяете себя unecessarily
  2. except: pass всегда неправильно
  3. platform.os не тип функции

Конспективный и правильная версия кода

import platform 

with open("reportLog.txt", "w") as log: 
    log.write("####REPORT####\n") 

    names = """dist system platform mac_ver dist node architecture 
     machine processor""".split() 

    for name in names: 
     label = name.upper() 
     getter = getattr(platform, name) 
     value = getter() 

     log.write('{}: {}\n'.format(label, value)) 

    log.write("##########") 

Я составьте список имена функций в платформе, которые вы хотите вызвать, а затем итерации по этим именам. Я удалил «ОС» из названий, потому что plaftorm.os это просто ссылка на модуль os, и я полагаю, что покрыто system

Для каждого имени, я сгенерировать ярлык upcasing его. Для каждого имени я получаю функцию с этим именем из модуля платформы. Чтобы получить возвращаемое значение для вызова этой функции, я вызываю ее. Я использую более общий способ компоновки форматированной строки и ее записи. Поскольку open обернут менеджером контекста, он закрывает файл для меня, когда заканчивается менеджер контекста.

Я не исключаю исключений, потому что не ожидаю. Если есть какие-то исключения, в моем коде есть ошибка, и я хочу знать об этом как можно более резко. Необязательные исключения будут в конечном итоге сбой программы и распечатать хороший backtrace, чтобы я мог видеть, где я прищурился. Беззаботное игнорирование исключений - это похоже на прорезь, касающуюся рта и носа плачущего ребенка. На данный момент это успокаивает, только чтобы создать худшую проблему в будущем (мертвый ребенок).

0

Вместо того, чтобы хранить информацию в кортежи, используйте обычные строки. Например:

sys = "SYS: " + platform.system()+ "\n" 
syslog = log.write(sys) 

Даже лучше вы можете использовать функцию форматирования, чтобы иметь более чистый код:

sys = "SYS: {0}\n".format(platform.system()) 
syslog = log.write(sys) 

Кроме того, убедитесь, чтобы поймать исключения, чтобы получить представление о причине проблемы:

try: 
    sys = "SYS: " + platform.system()+ "\n" 
    syslog = log.write(sys) 
except Exception as e: 
    print(e) 
0

В дополнение к проблеме, MSW заявил, я не понимаю, почему вы делаете что-то вроде этого:

syslog = log.write(sys) 
syslog() 

log.write не возвращает никакого значения (или None значение, чтобы быть точным) , Тем не менее, вы присваиваете этому None переменной и выполняете эту переменную, как если бы она была функцией.

Мое решение проще, чем MSW, ценою быть больше:

with open("reportLog.txt", "w") as log: 
    log.write("####REPORT####\n") 
    log.write('SYS: {}\n'.format(platform.system())) 
    # Other log.write lines here... 
    log.write("##########") 
Смежные вопросы