Выполнять строки вместо печати (python & cmd) - PullRequest
0 голосов
/ 09 февраля 2019

Просматривал интернет последние два часа и не нашел ответа.Ridiculus, я знаю ... Напишу немного больше об этом, может быть, кто-то еще посчитает это полезным.

Я хочу сохранить каждую отдельную кампанию mailchimp в виде не разбитого на страницы (непрерывного) PDF.Нашел эту замечательную программу, которая делает эту работу: wkhtmltopdf .Все, что мне нужно сделать, это запустить команду в cmd, которая выглядит следующим образом ...

"C:\Program Files\wkhtmltopdf\bin\"wkhtmltopdf -T 0 -B 0 --page-width 210mm --page-height 2970mm "www link" "C:\Temp\test.pdf"

Это, очевидно, создает очень длинный непрерывный PDF (10 страниц), но я могу пакетно обрабатывать (обрезать, оптимизировать, архивировать)позже с Acobe Acrobat Pro.

Я создал CSV-файл, содержащий список всех когда-либо отправленных кампаний.Например (последние три):

Datum;Naslov;Povezava
18.01.2019;KEPA VESELJA;https://mailchi.mp/61fadc2e06a7/nm9bhb5lc3-1575581
22.11.2018;V NOV KORAK;https://mailchi.mp/6fc2f0ef4346/nm9bhb5lc3-1557633
08.10.2018;VPIS 2019/20;https://mailchi.mp/9369428d0749/nm9bhb5lc3-1543093

Затем я написал короткий код Python ...

import csv

code = """"C:\\Program Files\\wkhtmltopdf\\bin\\"wkhtmltopdf -T 0 -B 0 --page-width 210mm --page-height 2970mm {povezava} "C:\\Users\\gaspe\\Desktop\\Temp\\{datum} - {naslov}.pdf\""""

with open("C:\\Users\\gaspe\\Desktop\\mailchimp\\seznam.csv", "r") as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    next(csvfile) #skipping the first row
    for row in reader:
        link = row[2]
        date = row[0]
        new_date = str(date[6:10]+"-"+date[3:5]+"-"+date[0:2])
        title = row[1].upper().replace('/','-').replace('!','').replace('?','')
        print(code.format(povezava=link, datum=new_date, naslov=title))

..., который читает каждую строку в файле CSV и печатает что-товот так ...

"C:\Program Files\wkhtmltopdf\bin\"wkhtmltopdf -T 0 -B 0 --page-width 210mm --page-height 2970mm https://mailchi.mp/61fadc2e06a7/nm9bhb5lc3-1575581 "C:\Users\gaspe\Desktop\Temp\2019-01-18 - KEPA VESELJA.pdf"
"C:\Program Files\wkhtmltopdf\bin\"wkhtmltopdf -T 0 -B 0 --page-width 210mm --page-height 2970mm https://mailchi.mp/6fc2f0ef4346/nm9bhb5lc3-1557633 "C:\Users\gaspe\Desktop\Temp\2018-11-22 - V NOV KORAK.pdf"
"C:\Program Files\wkhtmltopdf\bin\"wkhtmltopdf -T 0 -B 0 --page-width 210mm --page-height 2970mm https://mailchi.mp/9369428d0749/nm9bhb5lc3-1543093 "C:\Users\gaspe\Desktop\Temp\2018-10-08 - VPIS 2019-20.pdf"

Теперь главный вопрос: как заставить cmd запускать все строки одну за другой, а не просто распечатывать их?

Я знаю, я могу просто скопировать и вставить строки в cmd, и он выполнит их, но я был бы очень признателен за то, чтобы научиться делать это правильно:)

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете использовать модуль подпроцесса для запуска команд из оболочки:

import csv
from subprocess import check_output

code = """"C:\\Program Files\\wkhtmltopdf\\bin\\"wkhtmltopdf -T 0 -B 0 --page-width 210mm --page-height 2970mm {povezava} "C:\\Users\\gaspe\\Desktop\\Temp\\{datum} - {naslov}.pdf\""""

with open("C:\\Users\\gaspe\\Desktop\\mailchimp\\seznam.csv", "r") as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    next(csvfile) #skipping the first row
    for row in reader:
        link = row[2]
        date = row[0]
        new_date = str(date[6:10]+"-"+date[3:5]+"-"+date[0:2])
        title = row[1].upper().replace('/','-').replace('!','').replace('?','')
        cmd = code.format(povezava=link, datum=new_date, naslov=title)
        # print(cmd)
        check_output(cmd, shell=True)

Ссылка: https://docs.python.org/3/library/subprocess.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...