当从PHP调用Python时,subprocess.run不执行命令
我有一段PHP程序:
$docx_filename = "/var/www/editeur/docx/".$file1
$command5 = "python3 conv_docx_pdf.py \"$docx_filename\"";
$output = shell_exec($command5);
这个脚本叫做conv_docx_pdf.py:
import subprocess
import os
import sys
def docx_to_pdf(input_file):
# Get the file name without extension
file_name, _ = os.path.splitext(input_file)
# Construct the output file path with .pdf extension
output_file = file_name + ".pdf"
# Run unoconv to convert DOCX to PDF
subprocess.run(["unoconv", "-f", "pdf", input_file])
return output_file
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py <input_file>")
sys.exit(1)
input_file = sys.argv[1] # Get the input file from command-line argument
output_file = docx_to_pdf(input_file)
print("Output PDF:", output_file)
当我在Ubuntu终端执行命令(python3 conv_docx_pdf.py filename1.docx
)时,一切正常。但是,PHP却无法执行这个命令。
关于docx文件夹的权限:
drwxr-xr-x 2 www-data www-data 4096 Mar 26 12:58 docx
关于文件$file1的权限:
-rw-r--r-- 1 www-data www-data 11738 Mar 26 11:45 status29024.docx
我还有其他的Python程序(不使用subprocess),在PHP中调用时都能正常工作。希望能得到一些帮助。
2 个回答
0
在Ubuntu终端中执行命令(python3 conv_docx_pdf.py filename1.docx)时,一切正常。
你提供的代码生成的命令不是 python3 conv_docx_pdf.py filename1.docx
,而是 python3 conv_docx_pdf.py "filename1.docx"
(请注意多了双引号)。
在第二行末尾加上分号后,试试这个代码:
$file1 = "filename1.docx";
$docx_filename = "/var/www/editeur/docx/" . $file1;
$command5 = "python3 conv_docx_pdf.py $docx_filename";
$output = shell_exec($command5);
1
感谢大家的帮助。我终于找到了问题的根源,原来是和Unoconv以及www-data的权限有关。我参考了这个网站上的建议。
cd /var/www/
sudo mkdir .cache
sudo chown -R www-data:www-data .cache/
sudo chmod -R 744 .cache/
sudo mkdir .config
sudo chown -R www-data:www-data .config/
sudo chmod -R 744 .config/