Автор Гілка: python робота з файлами обєктами  (Прочитано 4256 раз)

niii

  • Гість
#!/usr/bin/python
#-*- coding: utf-8 -*-

import os,sys,popen2;
file = 'log.log';
target = '/home/distro';
def writelog(f1,f2):
      s= f2.readline();
      while s == '':
            f1.write(s);
            s= f2.readline();
      f2.close();
def runing( command ):
      print command + '\n';
      a = popen2.Popen3(command);
      voz = a.wait();
      f = a.fromchild;
      return voz,f;

f = open(file,'w');
os.chroot(target);
voz,ret = runing('ls -l');
writelog(f,ret);
f.close();

Все вроді правельно роблю
а в лог нічого не пише
щому ?

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: python робота з файлами обєктами
« Відповідей #1 : 2007-04-13 12:30:04 »
А без чруту працює? Я не питонець, але щось у мене підозри стосовно отого порівняння (s == '')...
« Змінено: 2007-04-13 12:38:45 від ISBear »

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: python робота з файлами обєктами
« Відповідей #2 : 2007-04-13 12:47:40 »
Такі зауваження:
#!/usr/bin/python
#!/usr/bin/env python

Все вроді правельно роблю
Почали б з пояснення, що саме ви хочете зробити, код у вас того, слабочитабельний=( І не ставте ";"  в кінці рядка, це не  обов'язково, та й не прийнято.

Якщо я правильно зрозумів, ви хочете записати в лог вивід "ls -l"? Тоді якось дивно ви це робите...

def runing( command ):
      print command + '\n';
      a = popen2.Popen3(command);
      voz = a.wait();
      f = a.fromchild;
      return voz,f;
Гм. А не простіше зробити os.popen("ls -l").readlines() і по одному їх покидати в лог? У всякому разі сенс використання в конкретному коді popen2 я не вловив.

niii

  • Гість
Re: python робота з файлами обєктами
« Відповідей #3 : 2007-04-13 13:12:16 »
А без чруту працює? Я не питонець, але щось у мене підозри стосовно отого порівняння (s == '')...
функція readline повертає '' коли кінець файлу.
в чрут /home/distro нова розпакована система лежить

niii

  • Гість
Re: python робота з файлами обєктами
« Відповідей #4 : 2007-04-13 13:18:13 »
Якщо я правильно зрозумів, ви хочете записати в лог вивід "ls -l"? Тоді якось дивно ви це робите...

Гм. А не простіше зробити os.popen("ls -l").readlines() і по одному їх покидати в лог? У всякому разі сенс використання в конкретному коді popen2 я не вловив.

Команда "ls -l"  як приклад.
я функцію "runing" буду дуже часто вукористовувати.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: python робота з файлами обєктами
« Відповідей #5 : 2007-04-13 13:18:24 »
Ну от, ви ганяєте цикл поки s дорівнює '', отже якщо s не дорівнює '' цикл моментально припиняється.
Чрут - то додаткове джерело можливої помилки. Спочатку впевніться що воно працює без чруту, а потім вже з ним.
« Змінено: 2007-04-13 13:23:31 від ISBear »

niii

  • Гість
Re: python робота з файлами обєктами
« Відповідей #6 : 2007-04-13 13:22:34 »
Ну от, ви ганяєте цикл поки s дорівнює '', отже якщо s не дорівнює '' цикл моментально припиняється.
Чрут - то додаткове джерело можливої помилки. Спочатку впевніться що воно працює без чруту, а потім вже з ним.
Все працює це я помилився  ;)
от як потрібно було:
while not(s == ''):

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: python робота з файлами обєктами
« Відповідей #7 : 2007-04-13 14:35:28 »
Ну от, ви ганяєте цикл поки s дорівнює '', отже якщо s не дорівнює '' цикл моментально припиняється.
Чрут - то додаткове джерело можливої помилки. Спочатку впевніться що воно працює без чруту, а потім вже з ним.
Все працює це я помилився  ;)
от як потрібно було:
while not(s == ''):
гг, дійсно, а я щось і не помітив... Буває ;D ;D

Відсутній rangel

  • Графоман
  • ****
  • дописів: 281
  • Карма: +0/-0
  • Python programmer
« Змінено: 2007-04-15 16:21:43 від rangel »
Roman Suprotkin

zzandy

  • Гість
Re: python робота з файлами обєктами
« Відповідей #9 : 2007-04-15 16:23:58 »
     s= f2.readline();
      while s == '':
            f1.write(s);
            s= f2.readline();


Я б написав або

for line in f2.readlines():
    f1.write(line)

або

f1.writelines(f2.readlines())
« Змінено: 2007-04-15 16:24:18 від zzandy »

Відсутній BM

  • Кореспондент
  • ***
  • дописів: 162
  • Карма: +0/-0
  • SUSE Linux Products GmbH
Re: python робота з файлами обєктами
« Відповідей #10 : 2007-11-08 14:49:32 »
Я б написав
f1.writelines(f2.readlines())

...  або:
f1.writelines(filter(None, map(lambda line:line.strip(), f2.readlines())))

Відсутній Веприк

  • Дописувач
  • **
  • дописів: 58
  • Карма: +0/-0
  • Pythonic man
Re: python робота з файлами обєктами
« Відповідей #11 : 2007-12-17 03:09:05 »
.... Пропущено....
Для логування я б рекомендував використовувати стандартний модуль logging.

« Змінено: 2007-12-17 03:09:20 від stoune »
Мої рефлексії на довкілля http://blog.sasnyk.name

Відсутній BM

  • Кореспондент
  • ***
  • дописів: 162
  • Карма: +0/-0
  • SUSE Linux Products GmbH
Re: python робота з файлами обєктами
« Відповідей #12 : 2007-12-17 13:46:03 »
.... Пропущено....
Для логування я б рекомендував використовувати стандартний модуль logging.
Це буде наступним етапом. Адже if nothing else helps, read the documentation...