当前位置 : 主页 > 编程语言 > python >

php调用python脚本,将word转为html代码及调用失败处理

来源:互联网 收集:自由互联 发布时间:2022-06-21
起因:因为公司遇到发稿问题,很多人喜欢用word编码,然后再发布到网站上。PHP的包中虽然有部分可以使用的类库,但是对于图片始终处理不好,我就想到了python。研究了下,python将


起因:因为公司遇到发稿问题,很多人喜欢用word编码,然后再发布到网站上。PHP的包中虽然有部分可以使用的类库,但是对于图片始终处理不好,我就想到了python。研究了下,python将word转为html还真是方便。但是,怎么结合到服务器上呢?我们的服务器是用PHP开发的。

直接使用​​pip install python-docx​​就可以安装python-docx了

1:python脚本

#!/usr/bin/python

# -*- coding: UTF-8 -*-


import sys

from pydocx import PyDocX


reload(sys)

sys.setdefaultencoding('utf8')


FileName = sys.argv[1] #获取文件名参数

ShortName = sys.argv[2] #获取文件名参数


html = PyDocX.to_html(FileName)

# f = open("/www/wwwroot/micuer.com/pythoncode/runtime/99.txt", 'w') #服务器的全路径

# f.write(html)

# f.close()

print(html)

2:php处理脚本

public function uploadword(){


try {

$file = request()->file("file");

// 上传到本地服务器

$savename = \think\facade\Filesystem::disk('upload')->putFile( 'word', $file);

$shotrname = time().".txt"; // 短名称

$savename = "/www/wwwroot/micuer.com/data/upload/".$savename; //Request::domain().

$python_file_name = "/www/wwwroot/micuer.com/pythoncode/WordToHtml.py";


//组装命令

$cmd = "python {$python_file_name} ".$savename." {$shotrname} 2>error.txt 2>&1";


$res = exec($cmd,$array, $ret);

return json(["code"=>200,"msg"=>"成功","data"=>$savename,"cmd"=>$cmd,"array"=>$array]);


} catch (think\exception\ValidateException $e) {

return json(["code"=>40000,"msg"=>$e->getMessage()]);

}

}

上传界面如下:
​​php调用python脚本,将word转为html代码及调用失败处理_python​​

实现的功能就是利用PHP的exec函数,调用py脚本,将html代码返回给前台服务器。

返回数据如下
​​php调用python脚本,将word转为html代码及调用失败处理_服务器_02​​

其实,再处理这个方案中,也遇到了很多问题,比如在命令行下只能成功,但是exec函数执行不成功等等。
参考了资料:​​https://my.oschina.net/u/4427610/blog/3155816​​也就是

exec("python python_test.py 2>error.txt 2>&1", $array, $ret);

在bash中0,1,2三个数字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
也可以通过以下方式将标准错误重定向到标准输出保存到$array中:
打印之后,发现是没有权限调用。于是就直接改为输出了,也就是 py的print(html)函数。

注意几点:
1:执行权限问题
2:exec(“python python_test.py 2>error.txt 2>&1”, $array, $ret); 中 $array就接受到了 print(html)的值
3:各个脚本尽量使用全路径

上一篇:python 自定义函数
下一篇:没有了
网友评论