Python,ftplib зависает при передаче данных на FTP сервер

Суть проблемы: Есть проект на Python, живущий на linux-машине, у этого проекта есть модуль-демон, который отправляет некоторые файлы на ФТП с различной периодичностью. Все работает хорошо, пока проект запущен в терминальном режиме, файлы отправляются, все хорошо. Но как только запустить этот проект в фоновом режиме (при запуске машины он автоматически запускается), модуль перестает работать, виснет на создании файла на FTP. Ниже код модуля:

import ftplib
def send_files(host, ftp_user, ftp_password, *filenames):
    print('NEW REPORTING. MAIN BODY')
    print('NEW REPORTING. Filenames', filenames) 
    con = ftplib.FTP(host, ftp_user, ftp_password)
    print('NEW REPORTING. Connection opened')
    con.set_pasv(False)
    con.sendcmd('PASV')
    print('NEW REPORTING. Passive mode set')
    # Открываем файл для передачи в бинарном режиме
    con.cwd('/ftp')
    print('CWD DONE')
    for filename in filenames:
            filename = filename.split('/')[-1]
            print('NEW REPORTING. Working with', filename)
            f = open(filename, "rb")
            print('NEW REPORTING. File opened')
            # Передаем файл на сервер
            send = con.storbinary("STOR "+ filename, f)
            print('NEW REPORTING. File sent')
            # Закрываем FTP соединение
    con.close
    print('NEW REPORTING. Connection closed')

А вот это вырезка из syslog:

Aug 14 12:56:22 watchman python3[1436]: NEW REPORTING. MAIN BODY
Aug 14 12:56:22 watchman python3[1436]: NEW REPORTING. Filenames ('/home/watchman/watchman/new_rfid_log', '/home/watchman/watchman/record_test.xml', '/home/watchman/watchman/record_test_ext.xml')
Aug 14 12:56:22 watchman python3[1436]: NEW REPORTING. Connection opened
Aug 14 12:56:22 watchman python3[1436]: NEW REPORTING. Passive mode set
Aug 14 12:56:22 watchman python3[1436]: NEW REPORTING. Working with new_rfid_log

На этом софтина благополучно виснет и ничего дальше не происходит. FTP работает в пассивном режиме.


Ответы (1 шт):

Автор решения: Артур Гильметдинов

Ответ найден! Проблема была в данном фрагменте кода:

   for filename in filenames:
        filename = filename.split('/')[-1]
        print('NEW REPORTING. Working with', filename)
        f = open(filename, "rb")
        print('NEW REPORTING. File opened')
        # Передаем файл на сервер
        send = con.storbinary("STOR "+ filename, f)

А именно в filename = filename.split('/')[-1] При запуске программы через его родную директорию (где и хранились файлы для отправки), в терминальном режиме, она успешно находила все filenames и по filename.split('/')[-1] их отправляла. Но вот при запуске в виде сервиса, видимо, менялась текущая рабочая директория, поэтому просто по названию файла, без указания полного пути (filenames.split('/')[-1]), программа ничего не находила и успешно висла. Решил вот таким образом:

 for filename in filenames:
            f = open(filename, "rb")
            filename = filename.split('/')[-1]
            send = con.storbinary("STOR "+ filename, f)
→ Ссылка