LINUX.ORG.RU

Python: вывод функции в файл

 


2

1
#!/usr/bin/env python
# -*- coding: koi8-r -*-

import ftplib

ftp = ftplib.FTP("ftp.ee.debian.org")
directory = '/debian/dists/stable/main/source'
ftp.login("anonymous", "anonymous")

data = []

f = open('~/list.txt', 'w')

ftp.dir(directory)

ftp.quit()

for line in data:
    print "-", line

f.close()

Данный скрипт нужен для вывода списка файлов в указанном каталоге на ftp в файл list.txt. Функция

ftp.dir(directory)
выводит список файлов в терминал, как направить ее вывод в файл list.txt?


f.write(тут текст)
f.close()

Еще смотри, ты при открытии файла используешь параметр w, точно не a нужно?

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)

Если нет желания разбираться с питоном сделай перенаправление в шеле

at ★★
()

./<твой-файл>.py > list.txt - первый раз бесплатно

msgascii
()
import ftplib
f = ftplib.FTP()
f.connect("ftp.ee.debian.org")
f.login("anonymous", "anonymous")
f.cwd('/debian/dists/stable/main/source')
ls = []
f.retrlines('LIST', ls.append)
for entry in ls:
    print entry
$ python ftp.py 
-rw-r--r--    1 ftp      ftp            95 Apr 25 11:11 Release
-rw-rw-r--    1 ftp      ftp       9133176 Apr 26 20:16 Sources.gz
-rw-r--r--    1 ftp      ftp       7065016 Apr 26 20:17 Sources.xz
Kilte ★★★★★
()

Ещё один вариант — переопределить sys.stdout. Хотя я бы не рекомендовал. А если и делать это, то очень осторожно. Например так:

import ftplib
import os
import sys


class Redirect(object):
    def __init__(self, stream):
        self.__origin_stdout = sys.stdout
        self.__new_stdout = stream
    def __enter__(self):
        sys.stdout = self.__new_stdout
    def __exit__(self, *args):
        sys.stdout = self.__origin_stdout

ftp = ftplib.FTP("ftp.ee.debian.org")
ftp.login("anonymous", "anonymous")
with open(os.path.expanduser('~/list.txt'), 'w') as fd:
    with Redirect(fd):
        ftp.dir('/debian/dists/stable/main/source')
ftp.quit()
print 'OK'

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Для хеллоувордов я не заморачивался, и просто делал sys.stdout = open('list.txt','w'). Но это для скриптов разового использования.

te111011010
()
from __future__ import print_function

...

print('-', line, file=f)
anonymous
()

Всем спасибо.

carabo
() автор топика
Ответ на: комментарий от te111011010

Ну это понятно, просто кто знает, что у него там.

Kilte ★★★★★
()
Ответ на: комментарий от metrokto

Эдик? На питоне? Может, он и на systemd перешёл? И в Москву переехал?

te111011010
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.