Скрипт не записывает файлы при вызове с сервера, но работает при запуске вручную - PullRequest
0 голосов
/ 14 января 2019

Структура текущей папки

У меня есть скрипт на python, который использует PyPDF2 для объединения PDF-файлов и вывода их в другую папку. В данный момент я пытаюсь запустить его на своем локальном компьютере (windows 10).

Скрипт работает нормально, если я запускаю его из терминала, PDF-файлы объединяются, и это зрелище.

Однако, когда я запускаю скрипт с сервера, он все равно запускается, но не создает объединенный pdf. Я знаю, что скрипт выполняется, потому что переменная $output разрешается как переменная напечатанного имени из скрипта. Сценарий вызывается из Deliveries.php файла

Так что в основном скрипт будет работать, но не будет писать :(. Я пытаюсь использовать php для запуска скрипта.

$command_text = 'python '.BASEPATH.'../application/controllers/scripts/merge.py';
$command = escapeshellcmd($command_text);
$output = shell_exec($command);//Returns the printed 'name' variable from the script

А скрипт такой:

import os
import time
from PyPDF2 import PdfFileMerger

name = int(time.time())
name = str(name) + '_1.pdf'
print(name)//The returned variable
files = os.listdir("staging")

pdfs = []
for file in files:
    pdfs.append("staging/" + file)

merger = PdfFileMerger()

for pdf in pdfs:
    merger.append(open(pdf, "rb"))

with open("here/"+name, "wb") as fout:
    merger.write(fout)

Я предполагаю, что это проблема с разрешениями, но я не уверен, как ее решить.

решаемые

Я думаю, что это как-то связано с codeigniter 3, но по неосторожности мне пришлось ссылаться на каталоги относительно корневой папки.

import os
import time
from PyPDF2 import PdfFileMerger

name = int(time.time())
name = str(name) + '_1.pdf'
# print(name)

files = os.listdir('application/controllers/scripts/staging')

pdfs = []
for file in files:
    pdfs.append("application/controllers/scripts/staging/" + file)
merger = PdfFileMerger()

for pdf in pdfs:
    merger.append(open(pdf, "rb"))
with open("../assets/pdfs/"+name, "wb") as fout:
    merger.write(fout)    
...