1
Tonni 2014-07-07 21:34:07 +08:00 1
有错误信息么?打印下上面的几个参数,确定传值成功。
|
2
yangqi 2014-07-07 21:37:30 +08:00
一般就是权限问题
|
3
beric OP |
5
yangqi 2014-07-07 21:45:07 +08:00
把exec换成passthru
|
7
beric OP @yangqi 但是执行某些单个的PYTHON或是BASH命令都是能正常输出的,我现在测试这个是一个有多个文件组成的PYTHON项目,不知道是不是这个影响到了……
|
8
txlty 2014-07-07 21:55:33 +08:00 1
$ret = popen("python3 pythontest","r");
$read=''; while(!feof($ret)){ $read .= fread($ret, 512); } echo $read; |
9
imn1 2014-07-07 22:14:38 +08:00
先搞清路径&权限
|
11
beric OP @imn1 执行其它PYTHON脚本是可以的。都能在WEB上看到输出,但这个或之前我试的加了参数的就不行:比如python3 test -a xxx 这样就不行,但python3 test这样是行的会提示缺少参数什么的……
|
12
xuxu 2014-07-07 22:57:02 +08:00
权限问题,可以吧权限a+x,然后把执行php脚本的用户的权限设为sudoer,NOPASSWD
|
13
imn1 2014-07-07 23:04:00 +08:00
首先我觉得无论如何是要指定路径的,如果py有import还要另外计算清楚
如果权限足够,可以考虑用shell_exec py里面指定了执行环境,还可以免去指定解析器python3 参数等问题还要考虑escapeshellcmd 最后要注意编码 |
14
beric OP |
15
hehe00 2017-02-14 11:56:52 +08:00
@beric 我也是通过 web(wmap)在 PHP 里调用执行 python,传的参数是一个 doc 文件的路径,在 web 方式执行就不行,在 python 里能够正确得到这个参数(sys.argv[1]),
import sys import os from win32com import client as wc if (os.path.exists(sys.argv[1])): word = wc.DispatchEx('Word.Application') doc = word.Documents.Open(sys.argv[1]) html_list_first = sys.argv[1].split('.' , 1) html_list_second = html_list_first[0].split('.') html_name = html_list_second[-1] + '.html' doc.SaveAs(html_name, 10) doc.Close() word.Quit() print("OK") else: print("No file exists!") print(sys.argv[1])的时候正确输出文件的路径,但是在 doc = word.Documents.Open(sys.argv[1]) 这一行的时候就不对了,print(doc) 输出的是 none.然而这一切在 cmd 中执行的时候又是成功的.麻烦帮我看下这怎么解决,我找了好久也不知道怎么弄下去 |