запись функции в файл, не получая ничего

Я пытаюсь записать psutil.test() в файл, но не могу заставить его работать. Есть какой-либо способ сделать это?

Это код, который я использую:

import psutil
import tkMessageBox

def Sysinfo():
 test = psutil.test()
 tkMessageBox.showinfo(title='testing',message=test)
 FILE = open("sysinfo.txt","w")
 FILE.write(str(test))
 FILE.close()

Sysinfo()

В файле есть строка "Нет".

В приглашении psutils.test() отображается:

USER PID %CPU %MEM VSZ RSS TTY ВРЕМЯ НАЧАЛА КОМАНДЫ root 1 0.0 0.1 3532 1944 ? 14:23 00:00 инициировать root 2 0.0 ? ? ? ? 14:23 00:00 kthreadd root 3 0.0 ? ? ? ? 14:23 00:00 ksoftirqd/0 root 5 0.0 ? ? ? ? 14:23 00:00 kworker/u:0 root 6 0.0 ? ? ? ? 14:23 00:00 миграция/0 и т.д..


person HeWhoStudies    schedule 19.10.2012    source источник
comment
у вас есть необходимые разрешения для записи в каталог?   -  person Aniket Inge    schedule 19.10.2012
comment
Какое значение возвращает psutil.test()?   -  person Ignacio Vazquez-Abrams    schedule 19.10.2012
comment
Что вы имеете в виду, не можете заставить его работать? Что показывает sysinfo.txt?   -  person Lanaru    schedule 19.10.2012
comment
test имеет значение None после запуска test = psutil.test(). Может быть, psutil.test() ничего не возвращает, а просто выводит результат?   -  person Alexander Stefanov    schedule 19.10.2012
comment
@PrototypeStark да, у меня есть права. Я добавил быстрый вывод и вывод, который я получаю в текстовом файле.   -  person HeWhoStudies    schedule 19.10.2012


Ответы (2)


Попробуй это:

def SysInfo():
  oldstdout = sys.stdout
  sys.stdout = open("sysinfo.txt","w")
  psutil.test()
  sys.stdout.close()
  sys.stdout = oldstdout
SysInfo()

Это перенаправит стандартный вывод в файл, напишет в него и даст вам правильный ответ.

person Aniket Inge    schedule 19.10.2012
comment
Я получаю NameError: глобальное имя «закрыть» не определено - person HeWhoStudies; 19.10.2012
comment
Вероятно, должно быть sys.stdout.close() ... Я действительно видел это где-то в контекстном менеджере ... очень круто - person mgilson; 19.10.2012
comment
Я не знаю, почему это работает. Но я счастлив, что это так. Спасибо! @PrototypeStark и мглисон - person HeWhoStudies; 19.10.2012
comment
@HeWhoStudies Это работает, потому что я перенаправил вывод psutil.test() в другой файл. - person Aniket Inge; 19.10.2012
comment
@HeWhoStudies выбор ответа - это способ ТАК сказать спасибо :-) - person Aniket Inge; 19.10.2012

psutil.test() печатает только результат, у него нет оператора возврата. Попробуй это:

import inspect
import psutil
test_source_code = inspect.getsource(psutil.test)
print test_source_code

Вы можете искать оператор return следующим образом:

test_source_code.find('return') yields `-1`

Вот как заканчивается psutil.test():

            print_(templ % (user[:10],
                        pinfo['pid'],
                        pinfo['cpu_percent'],
                        memp,
                        vms,
                        rss,
                        pinfo.get('terminal', '') or '?',
                        ctime,
                        cputime,
                        pinfo['name'].strip() or '?'))

СОВЕТ: Вот удобный способ чтения кода Python в терминале. (Сначала сделайте pip install pygments!)

import pygments
from pygments.lexers import PythonLexer
from pygments.formatters import TerminalFormatter
from pygments import highlight

print hightlight(test_source_code, PythonLexer(), TerminalFormatter())
person Alexander Stefanov    schedule 19.10.2012
comment
Вы волшебник. Огромное спасибо! - person HeWhoStudies; 19.10.2012