从服务器调用时,脚本无法写入文件,但在手动运行时可以运行

时间:2019-01-14 04:04:31

标签: php python scripting permissions

Current folder structure

我有一个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)    

0 个答案:

没有答案