Автор Тема: скрипт высылает картинку на почту.  (Прочитано 1528 раз)

Оффлайн feraeq

  • Житель
Вобщем сделал скрипт на питоне. рендер картинку на почту присылает. доделал из чьих то кодов при которых можно просто кидать файлы в папку и получать картинку.
все на лине.
в домашней директории должны быть папки: project(где лежат все скрипты и распакованная портабл версия blender),
папка d (если копируем файл в папку для рендеринга,как 1 вариант рендеринга).
Рендер по почте, через фильтр можно указать параметр определенных писем с файлом .blend для автоматического рендеринга через почту))) либо через сетевую папку.
Должны быть установленны программы:
mutt, procmail, fetchmail,python.

1файл:
#!-*- coding: utf-8 -*-

import bpy, os
import datetime
import time #импортировали модуль для работы со временем


def seach_file() :
    try :
       
        def write() :
            write_file_list = os.popen('/bin/find ~/render_file -maxdepth 1 -type f -name "*.blend" -printf "%f\n" >> ~/project/file_list.txt')
        time.sleep(2)
        write_blend = write()
        def cp() :
            cp = os.popen('/bin/cp ~/render_file/*.blend ~/project/')
        cp_blend = cp()
        time.sleep(2)
        def rm() :
            rm = os.popen('~/render_file/*.blend')
        del_blend = rm()
        time.sleep(5)
        #file_list = open('~/project/file_list.txt','a')
        #file_list.writelines('\n'+ name_file)#
        #print name_file
        #file_list.close()
   
    except : pass


def send_mail() :
    mail_list = open('~/project/mail_list.txt','r')
    st = mail_list.readlines()
    for i in range(len(st)) :   
        # Открываем файл только для чтения
        f = open('~/project/send_mail.sh', 'r')
        lines = f.readlines()
        lines = ('#!/bin/bash'+'\n mutt -s "Rendering" адрес@mail.ru <  ~/project/render_go.txt ;')
        print ("запись названия файла в txt для письма" )
        rendlist = render_go()
        # Открываем файл для записи
        save_changes = open('~/project/send_mail.sh', 'w')
        # Сохраняем список строк
        save_changes.writelines(lines)
        mail_list.close()
        f.close()
        save_changes.close()
        p = os.popen(". ~/project/send_mail.sh")
       
       
def t_converter() :
    #!-*- coding: utf-8 -*-
    p = os.popen(". ~/project/converter_jpg.sh")


def t_send_jpg() :
    mail_list = open('~/project/mail_list.txt','r')
    st = mail_list.readlines()
    for i in range(len(st)) :
        f = open('~/project/send_jpg.sh', 'r')
        lines = f.readlines()
        lines = ('#!/bin/bash'+'\n mutt -s "Rendering" адрес@mail.ru -a ~/project/*.jpg <  ~/project/text.txt ;').format(st[-1])
       
        save_changes = open('send_jpg.sh', 'w')
       
        save_changes.writelines(lines)
        mail_list.close()
        f.close()
        save_changes.close()
        p = os.popen(". ~/project/send_jpg.sh")


def render_go():
    file_list = open('~/project/file_list.txt','r')
    st = file_list.readlines()
    for i in range(len(st)) :
        # Открываем файл только для чтения
        f = open('~/project/render_go.txt', 'r')
        lines = f.readlines()
        lines = ('-------------------'+'\n Начало рендеринга '+'\n-------------------'+'\n|{}             ' ).format(a[-1])
        # Открываем файл для записи
        save_changes = open('~/project/render_go.txt', 'w')
        # Сохраняем список строк
        save_changes.writelines(lines)
        file_list.close()
        f.close()


list = os.listdir()

a = []


def render() :       
    list = os.listdir()
    name_file = a[-1]
    name_file = name_file.strip()
    print (name_file , "файл из списка")
    for x in list :
        if name_file == str(x):
            print ("из списка записать название крайнего файла")
            rendgo = render_go()
            # Открываем файл только для чтения
            #f = open('/home/serg/project/render_go.txt', 'r')
            #lines = f.readlines()
            #lines = ('-------------------'+'\n Начало рендеринга '+'\n-------------------'+'\n|{}             ' ).format(name_file)
            # Открываем файл для записи
            #save_changes = open('~/project/render_go.txt', 'w')
            # Сохраняем список строк
            #save_changes.writelines(lines)
            #file_list.close()
            #f.close()
            print ("отправка письма с началом рендеринга")
            time.sleep(2)
            sendm = send_mail()
            print("открытие blend файла программой из дирректории")
            time.sleep(2)
            bpy.ops.wm.open_mainfile(filepath = name_file )
            print ("загрузка сцен из blend фалйла в дирректории")
            scn = bpy.data.scenes
            for i in scn:
                time.sleep(2)
                namef = str(name_file+'_'+str(i.name) )
               
                i.render.filepath = ('\\/~/project\\'+namef )
                try :
                    try :
                        print ( "начало рендеринга")
                        bpy.ops.render.render(write_still = True , scene = i.name)
                        print ( "сохранение картинки 1")
                    except :
                        pass
                        print ("начало рендеринга")
                        bpy.ops.render.CYCLES(write_still = True , scene = i.name)
                        print ( "сохранение картинки 1")
                        break
                    mail_list = open('~/project/mail_list.txt','r')
                    st = mail_list.readlines()
                    st = st[-1]
                    print ("чтение имейла из майл листа")
                    time.sleep(2)
                    def mk_dir():
                        print ("создание папки сименем имейла")
                        p = os.popen(("/bin/mkdir ~/d/{}").format(st))
                    mk = mk_dir()
                    time.sleep(2)
                    def cp_image():
                        print ("файл изображения ="+namef)
                        print ( "копирование картинки из папки project в папку d ")
                        p = os.popen(("/bin/cp '~/project/'{}.* /home/serg/d/{}").format(namef,st))
                        print ("копирование картинки из папки project в папку render_file ")
                        p = os.popen(("/bin/cp '~/project/'{}.* /home/serg/render_file").format(namef))
                    mk = cp_image()
                    time.sleep(2)
                    print (" конвертирование картинки в jpg формат")
                    mail = t_converter()
                    time.sleep(2)
                    print ( "отправка письма с jpg картинкой")
                    mail_jpg = t_send_jpg()
                    time.sleep(2)
                    print ( " удаление картинки png в папке project")
                    os.remove('~/project/'+name_file+'_'+str(i.name)+'.png')
                    time.sleep(2)
                    print ("удаление картинки jpg в папке project" )
                    os.remove('~/project/'+name_file+'_'+str(i.name)+'.jpg')
                except :
                    pass
                    os.remove(name_file)
                finally:
                    pass
                    os.remove(name_file)
while True :
    try:       
        '''while True :
            try:
                seach_blend = seach_file()         
       
            except KeyboardInterrupt:
                print ('Отменено чтение файла')
            finally:
       
                time.sleep(10)
                print ("отсутствие файла_в_папке_render_file")
                break'''
        f = open('~/project/file_list.txt')
        line  = ''
        def z() :
            b = []
            k = []
            for line0 in open('~/project/file_list.txt') : #читать строку,открыли на чтение
                line0 = line0.strip()
                '''print (line0, "строка из файл листа")'''
                if len(line0) != 0 :
                    b.append(line0)
                    k.append(line0)
                   
                    if (len(k)-1) > (len(a)-1) :
                        s = b.pop()
                        a.append(s)
                        time.sleep(2)
                        try :
                            rend = render()
                            time.sleep(5)
                        except :
                            pass
       
       
        g = z()
       
        f.close()
        time.sleep(10)
        print ("отсутствие файла в файловом листе")
       
       
    except KeyboardInterrupt:
        print ('Отменено чтение файла')
    finally:
        f.close()
        time.sleep(10)
        print ("отсутствие файла в файловом листе2")
       

if __name__ == '__main__':
    main()


2файл пустой file_list.txt.

3файл:
#!/bin/bash
 mogrify -format jpg ~/project/*.png ;
 
 #mogrify -resize 300x300 ~/project/*.jpg ;
 
 #rm -f ~/project/*.jpg~* ;

4файл mail_list.txt :
указываем основной имеил который используется для скрипта.

5файл send_jpg.sh  и 6 файл send_mail.sh:
пустые.


« Последнее редактирование: 28 Август 2017, 21:05:47 от feraeq »

Оффлайн Striver

  • Житель
  • недоинженер, полупрограммист
    • http://striver00.ru
Re: скрипт высылает картинку на почту.
« Ответ #1 : 28 Август 2017, 22:26:52 »
Желательно оформить программу в тег "code" (сверху редактирования есть кнопочка #), для Питона с его отступами особенно актуально.
Код
a=[1, 3, 5]
for i in a:
    print(a)

Оффлайн feraeq

  • Житель
Re: скрипт высылает картинку на почту.
« Ответ #2 : 29 Август 2017, 13:16:44 »
Ну это надо чтоб 3DRend поправил.

Оффлайн feraeq

  • Житель
Re: скрипт высылает картинку на почту.
« Ответ #3 : 29 Август 2017, 14:28:31 »
Вобщем сделал скрипт на питоне. рендер картинку на почту присылает. доделал из чьих то кодов при которых можно просто кидать файлы в папку и получать картинку.
все на лине.
в домашней директории должны быть папки:
project(где лежат все скрипты и распакованная портабл версия blender),
папка d (её используем для рендеринга,как 1-ый  вариант рендеринга).
Можно сделать рендер по почте, через фильтр можно указать параметр определенных писем с файлом .blend для автоматического рендеринга через почту))) либо через сетевую папку.
Должны быть установленны программы:
mutt, procmail, fetchmail,ripmime,python.

Файлы:
2файл пустой file_list.txt.

3файл:
#!/bin/bash
Код
 mogrify -format jpg ~/project/*.png ;
 
 #mogrify -resize 300x300 ~/project/*.jpg ;
 
 #rm -f ~/project/*.jpg~* ;

4файл mail_list.txt :
указываем основной имеил который используется для скрипта.( Можно доделать и адрес имейла отправителя впишется автоматически.Для этого в .procmailrc нужно добавить строчку
Код
 SENDER=`formail -zxFrom:|cut -f2- -d'<' | cut -f1 -d'>'`
# Из писем с темой Render извлечь вложение и положить его в files домашнего каталога получателя
:0
* ^From.*
* ^Subject:.*Render
* !^FileName.*.zip
{
    :0 c :       # Anything from hgfh
|/bin/mkdir -p $ATTACHDIR/$SENDER # will go to $MAILDIR/unrar

:0 c : #Скрипт извлечение архива
|ripmime -i - --no-nameless -d  $ATTACHDIR -p header -e       

:0 aw
|. ~/d/filtermail2.sh      # /bin/mkdir ~/ < (formail-X From) ;  then mkdir -m 0750 «$NDIR» fi formail -X 'From: adr' > mkdir ~/d/$adr

}
  и скорректировать 1 файл.)
filtermail2.sh
Код
#!-*- coding: utf-8 -*-


import os


def filtermail2() :
   
    def unzip() :
        unzip_zip = os.popen('/usr/bin/unzip  ~/d/*.zip')
       
    rm_zip = unzip()
    def rm() :
        rm_zip = os.popen('/bin/rm -f ~/d/*.zip')
    zip_blend = rm()
       
    def find() :
        find_blend = os.popen('/bin/find ~/d/ -maxdepth 1 -type f -name "*.blend" -printf "%f\n" >> ~/project/file_list.txt')
    find_blend = find()
       
    def mv() :
        mv_zipblend = os.popen('/bin/mv -f  ~/d/*.blend  ~/project')
    mv_blend = mv()
       



filtermail2_script = filtermail2()

5файл send_jpg.sh  и 6 файл send_mail.sh пустые.
 и файл запуска render.bat :

Код
#!/bin/bash
cd ~/project/ ;  ./blender  -b --python new_time_render.py

1файл:
Код
#!-*- coding: utf-8 -*-

import bpy, os
import datetime
import time #импортировали модуль для работы со временем


def seach_file() :
    try :
       
        def write() :
            write_file_list = os.popen('/bin/find ~/render_file -maxdepth 1 -type f -name "*.blend" -printf "%f\n" >> ~/project/file_list.txt')
        time.sleep(2)
        write_blend = write()
        def cp() :
            cp = os.popen('/bin/cp ~/render_file/*.blend ~/project/')
        cp_blend = cp()
        time.sleep(2)
        def rm() :
            rm = os.popen('~/render_file/*.blend')
        del_blend = rm()
        time.sleep(5)
        #file_list = open('~/project/file_list.txt','a')
        #file_list.writelines('\n'+ name_file)#
        #print name_file
        #file_list.close()
   
    except : pass


def send_mail() :
    mail_list = open('~/project/mail_list.txt','r')
    st = mail_list.readlines()
    for i in range(len(st)) :   
        # Открываем файл только для чтения
        f = open('~/project/send_mail.sh', 'r')
        lines = f.readlines()
        lines = ('#!/bin/bash'+'\n mutt -s "Rendering" адрес@mail.ru <  ~/project/render_go.txt ;')
        print ("запись названия файла в txt для письма" )
        rendlist = render_go()
        # Открываем файл для записи
        save_changes = open('~/project/send_mail.sh', 'w')
        # Сохраняем список строк
        save_changes.writelines(lines)
        mail_list.close()
        f.close()
        save_changes.close()
        p = os.popen(". ~/project/send_mail.sh")
       
       
def t_converter() :
    #!-*- coding: utf-8 -*-
    p = os.popen(". ~/project/converter_jpg.sh")


def t_send_jpg() :
    mail_list = open('~/project/mail_list.txt','r')
    st = mail_list.readlines()
    for i in range(len(st)) :
        f = open('~/project/send_jpg.sh', 'r')
        lines = f.readlines()
        lines = ('#!/bin/bash'+'\n mutt -s "Rendering" адрес@mail.ru -a ~/project/*.jpg <  ~/project/text.txt ;').format(st[-1])
       
        save_changes = open('send_jpg.sh', 'w')
       
        save_changes.writelines(lines)
        mail_list.close()
        f.close()
        save_changes.close()
        p = os.popen(". ~/project/send_jpg.sh")


def render_go():
    file_list = open('~/project/file_list.txt','r')
    st = file_list.readlines()
    for i in range(len(st)) :
        # Открываем файл только для чтения
        f = open('~/project/render_go.txt', 'r')
        lines = f.readlines()
        lines = ('-------------------'+'\n Начало рендеринга '+'\n-------------------'+'\n|{}             ' ).format(a[-1])
        # Открываем файл для записи
        save_changes = open('~/project/render_go.txt', 'w')
        # Сохраняем список строк
        save_changes.writelines(lines)
        file_list.close()
        f.close()


list = os.listdir()

a = []


def render() :       
    list = os.listdir()
    name_file = a[-1]
    name_file = name_file.strip()
    print (name_file , "файл из списка")
    for x in list :
        if name_file == str(x):
            print ("из списка записать название крайнего файла")
            rendgo = render_go()
            # Открываем файл только для чтения
            #f = open('/home/serg/project/render_go.txt', 'r')
            #lines = f.readlines()
            #lines = ('-------------------'+'\n Начало рендеринга '+'\n-------------------'+'\n|{}             ' ).format(name_file)
            # Открываем файл для записи
            #save_changes = open('~/project/render_go.txt', 'w')
            # Сохраняем список строк
            #save_changes.writelines(lines)
            #file_list.close()
            #f.close()
            print ("отправка письма с началом рендеринга")
            time.sleep(2)
            sendm = send_mail()
            print("открытие blend файла программой из дирректории")
            time.sleep(2)
            bpy.ops.wm.open_mainfile(filepath = name_file )
            print ("загрузка сцен из blend фалйла в дирректории")
            scn = bpy.data.scenes
            for i in scn:
                time.sleep(2)
                namef = str(name_file+'_'+str(i.name) )
               
                i.render.filepath = ('\\/~/project\\'+namef )
                try :
                    try :
                        print ( "начало рендеринга")
                        bpy.ops.render.render(write_still = True , scene = i.name)
                        print ( "сохранение картинки 1")
                    except :
                        pass
                        print ("начало рендеринга")
                        bpy.ops.render.CYCLES(write_still = True , scene = i.name)
                        print ( "сохранение картинки 1")
                        break
                    mail_list = open('~/project/mail_list.txt','r')
                    st = mail_list.readlines()
                    st = st[-1]
                    print ("чтение имейла из майл листа")
                    time.sleep(2)
                    def mk_dir():
                        print ("создание папки сименем имейла")
                        p = os.popen(("/bin/mkdir ~/d/{}").format(st))
                    mk = mk_dir()
                    time.sleep(2)
                    def cp_image():
                        print ("файл изображения ="+namef)
                        print ( "копирование картинки из папки project в папку d ")
                        p = os.popen(("/bin/cp '~/project/'{}.* /home/serg/d/{}").format(namef,st))
                        print ("копирование картинки из папки project в папку render_file ")
                        p = os.popen(("/bin/cp '~/project/'{}.* /home/serg/render_file").format(namef))
                    mk = cp_image()
                    time.sleep(2)
                    print (" конвертирование картинки в jpg формат")
                    mail = t_converter()
                    time.sleep(2)
                    print ( "отправка письма с jpg картинкой")
                    mail_jpg = t_send_jpg()
                    time.sleep(2)
                    print ( " удаление картинки png в папке project")
                    os.remove('~/project/'+name_file+'_'+str(i.name)+'.png')
                    time.sleep(2)
                    print ("удаление картинки jpg в папке project" )
                    os.remove('~/project/'+name_file+'_'+str(i.name)+'.jpg')
                except :
                    pass
                    os.remove(name_file)
                finally:
                    pass
                    os.remove(name_file)
while True :
    try:       
        '''while True :
            try:
                seach_blend = seach_file()         
       
            except KeyboardInterrupt:
                print ('Отменено чтение файла')
            finally:
       
                time.sleep(10)
                print ("отсутствие файла_в_папке_render_file")
                break'''
        f = open('~/project/file_list.txt')
        line  = ''
        def z() :
            b = []
            k = []
            for line0 in open('~/project/file_list.txt') : #читать строку,открыли на чтение
                line0 = line0.strip()
                '''print (line0, "строка из файл листа")'''
                if len(line0) != 0 :
                    b.append(line0)
                    k.append(line0)
                   
                    if (len(k)-1) > (len(a)-1) :
                        s = b.pop()
                        a.append(s)
                        time.sleep(2)
                        try :
                            rend = render()
                            time.sleep(5)
                        except :
                            pass
       
       
        g = z()
       
        f.close()
        time.sleep(10)
        print ("отсутствие файла в файловом листе")
       
       
    except KeyboardInterrupt:
        print ('Отменено чтение файла')
    finally:
        f.close()
        time.sleep(10)
        print ("отсутствие файла в файловом листе2")
       

if __name__ == '__main__':
    main()
« Последнее редактирование: 29 Август 2017, 15:20:21 от feraeq »

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 68
Автор: LEXA ANЭGROWND
blender.png
Скачано: 78
Автор: ipv2007
4.png
Скачано: 100
Автор: hiroyukiss
2.png
Скачано: 122
Автор: hiroyukiss

Скачано: 112
Автор: Dilifa12