PHP 执行 PYTHON 脚本问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
beric
V2EX    问与答

PHP 执行 PYTHON 脚本问题

  •  
  •   beric 2014-07-07 21:26:24 +08:00 13420 次点击
    这是一个创建于 4121 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如有一个a.php文件
    PHP中调用
    exec("python3 pythontest",$ret,$res);
    在命令行中运行PHP 是可以的,但到了WEB端就不行了。为什么?
    20 条回复    2018-03-22 20:42:07 +08:00
    Tonni
        1
    Tonni  
       2014-07-07 21:34:07 +08:00   1
    有错误信息么?打印下上面的几个参数,确定传值成功。
    yangqi
        2
    yangqi  
       2014-07-07 21:37:30 +08:00
    一般就是权限问题
    beric
        3
    beric  
    OP
       2014-07-07 21:41:41 +08:00
    @Tonni
    @yangqi
    echo "\n ret=".var_dump($ret);
    我在下面打印返回值,在网页端是输出int(1) ret=
    在命令行就输出int(0)
    beric
        4
    beric  
    OP
       2014-07-07 21:42:29 +08:00
    @yangqi 主要不知道怎么查看PYTHON执行时报错的信息
    yangqi
        5
    yangqi  
       2014-07-07 21:45:07 +08:00
    把exec换成passthru
    beric
        6
    beric  
    OP
       2014-07-07 21:51:45 +08:00
    @yangqi 试过了,用这个函数的话在WEB端啥也没有东西出来
    beric
        7
    beric  
    OP
       2014-07-07 21:53:07 +08:00
    @yangqi 但是执行某些单个的PYTHON或是BASH命令都是能正常输出的,我现在测试这个是一个有多个文件组成的PYTHON项目,不知道是不是这个影响到了……
    txlty
        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;
    imn1
        9
    imn1  
       2014-07-07 22:14:38 +08:00
    先搞清路径&权限
    beric
        10
    beric  
    OP
       2014-07-07 22:18:37 +08:00
    @txlty 刚试了,竟然还是空……是不是哪里出了问题?
    beric
        11
    beric  
    OP
       2014-07-07 22:21:40 +08:00
    @imn1 执行其它PYTHON脚本是可以的。都能在WEB上看到输出,但这个或之前我试的加了参数的就不行:比如python3 test -a xxx 这样就不行,但python3 test这样是行的会提示缺少参数什么的……
    xuxu
        12
    xuxu  
       2014-07-07 22:57:02 +08:00
    权限问题,可以吧权限a+x,然后把执行php脚本的用户的权限设为sudoer,NOPASSWD
    imn1
        13
    imn1  
       2014-07-07 23:04:00 +08:00
    首先我觉得无论如何是要指定路径的,如果py有import还要另外计算清楚
    如果权限足够,可以考虑用shell_exec
    py里面指定了执行环境,还可以免去指定解析器python3
    参数等问题还要考虑escapeshellcmd
    最后要注意编码
    beric
        14
    beric  
    OP
       2014-07-07 23:37:08 +08:00
    @imn1
    @xuxu
    @Toni
    已解决了,权限什么的这个我全都CHECK过,不是权限的问题,我刚才一句句的跟,发现是那个PYTHON的工程里调用了一函数,那函数会输出一些字符信息之类的,我把它屏蔽掉就能正常输出信息而不是空白页了。估计是那输出信息有些些影响到了WEB端的输出导致……
    谢谢各位!
    hehe00
        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 中执行的时候又是成功的.麻烦帮我看下这怎么解决,我找了好久也不知道怎么弄下去
    beric
        16
    beric  
    OP
       2017-02-14 15:40:32 +08:00
    @hehe00 权限有检查过吗?或者是不是相对绝对路径的问题?
    hehe00
        17
    hehe00  
       2017-02-15 09:45:02 +08:00
    @beric 同样的路径在 cmd 中执行 python 或者 cmd 中执行 PHP 去调用 python 都是可以的, 权限的话设置的 Everyone 获取全部权限
    beric
        18
    beric  
    OP
       2017-02-16 17:09:55 +08:00
    @hehe00 看看是不是字符串的编码问题导致
    hehe00
        19
    hehe00  
       2017-02-17 09:28:59 +08:00
    @beric 谢谢你!
    leksas
        20
    leksas  
       2018-03-22 20:42:07 +08:00
    我在同级目录,比如说在 /var/www/html 下有 info.php 和 demo.py ,然后我在 info.php 用 shell_exec("python demo.py"),可以获取调用的结果。然而,当我将 demo.py 放到下一级目录,即 /var/www/html/scripts 下,就不能正常调用了,把脚本路径改为绝对路径也不行~求大佬解答
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2661 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:13 PVG 17:13 LAX 02:13 JFK 05:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86