python+apache+django调用系统shell命令失败

疯狂的轮子搬运工 2014-08-21 09:36:26
我做了一个小工程想执行系统shell命令,通过本地的服务器Apache+python。python脚本中想通过os.system或者subp[rocess的一些方法来执行。但是在python shell中测试一个python脚本时可以成功地调用,放到webserver下就不能成功启动了。事实上我发现在任务管理器中启动了进程,但是在桌面上并没有出现窗口。更奇怪的是error.log中也没有记录。google了整整一天了,方法各式各样,却没有能用的方法。在这里请教一下各位,谢谢!
...全文
481 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
laowang217 2017-03-09
  • 打赏
  • 举报
回复
能不能告诉我如何在Django搭建页面,执行python脚本,并将执行内容返回页面啊
  • 打赏
  • 举报
回复
引用 8 楼 openXMPP 的回复:
设置完了 把httpd服务重启下 然后再看下 后面几个参数填这样 shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 然后 p.communicate 你直接执行可以是因为你可以看到标准输出 父子进程之间通信要靠PIPE 必然看不到输出
按你说的把LogLevel调到debug,也没发现什么相关的错误。事实上我把命令注释过后产生的日志和没有注释时是一样的。。p.communicate()也试了一下,依旧不行。
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
设置完了 把httpd服务重启下 然后再看下 后面几个参数填这样 shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 然后 p.communicate 你直接执行可以是因为你可以看到标准输出 父子进程之间通信要靠PIPE 必然看不到输出
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
log级别反了吧 应该是crit太高了 设置成debug这样信息多点
  • 打赏
  • 举报
回复
引用 5 楼 openXMPP 的回复:
那你看下access log 把apache日志级别再调高看下
日志级别调到crit,error.log里还是没有错误提示。我把代码贴一下吧。

def open_file(request):
    try:
		p =subprocess.Popen('D:\\Apache24\\test.bat',shell=True,stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT,close_fds=False)
    except Exception,e:
        print e
    return HttpResponse(json.dumps({'pkg_path':[]}), 'text/plain')
在浏览器里输入url时能返回pkg_path:[]的,但上面的命令没执行。
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
那你看下access log 把apache日志级别再调高看下
  • 打赏
  • 举报
回复
引用 3 楼 openXMPP 的回复:
getenforce 看看是不是开启了selinux 或者你在windows上试试 你执行命令的时候 用的是绝对路径 还是相对路径 改成绝对路径试试
我是在windows下的,绝对路径和相对路径都用过。相同的命令在python shell下能执行。
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
getenforce 看看是不是开启了selinux 或者你在windows上试试 你执行命令的时候 用的是绝对路径 还是相对路径 改成绝对路径试试
  • 打赏
  • 举报
回复
引用 14 楼 openXMPP 的回复:
[quote=引用 13 楼 Necstyle 的回复:] [quote=引用 12 楼 openXMPP 的回复:] 你在open_file的入口和出口都加日志 看是卡住了 还是其他问题 这里不用subprocess调用再试试
确实在命令的前面和后面都加了日志,运行后命令前面的日志打印了,后面的没有,页面也无法刷新出值,说明是卡住了。 之前os.system(),os.popen(),subprocess.call()都用过了,都一样无法执行。[/quote] 命令'D:\\Apache24\\test.bat' 改成 r'D:\Apache24\test.bat' 试试[/quote] 还是不行欸
  • 打赏
  • 举报
回复
引用 1 楼 openXMPP 的回复:
什么叫放在webserver下就不行了? 放在webserver下你让谁调? apache? 你配置wsgi了吗 模块加载了吗
在浏览器输入对应的url时是能正确返回w测试的值,但是感觉就是没有执行那个命令。
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
什么叫放在webserver下就不行了? 放在webserver下你让谁调? apache? 你配置wsgi了吗 模块加载了吗
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
引用 13 楼 Necstyle 的回复:
[quote=引用 12 楼 openXMPP 的回复:] 你在open_file的入口和出口都加日志 看是卡住了 还是其他问题 这里不用subprocess调用再试试
确实在命令的前面和后面都加了日志,运行后命令前面的日志打印了,后面的没有,页面也无法刷新出值,说明是卡住了。 之前os.system(),os.popen(),subprocess.call()都用过了,都一样无法执行。[/quote] 命令'D:\\Apache24\\test.bat' 改成 r'D:\Apache24\test.bat' 试试
  • 打赏
  • 举报
回复
引用 12 楼 openXMPP 的回复:
你在open_file的入口和出口都加日志 看是卡住了 还是其他问题 这里不用subprocess调用再试试
确实在命令的前面和后面都加了日志,运行后命令前面的日志打印了,后面的没有,页面也无法刷新出值,说明是卡住了。 之前os.system(),os.popen(),subprocess.call()都用过了,都一样无法执行。
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
你在open_file的入口和出口都加日志 看是卡住了 还是其他问题 这里不用subprocess调用再试试
  • 打赏
  • 举报
回复
引用 10 楼 openXMPP 的回复:
设个断点调试下 在程序入口随便打点log 看open_file有没有被调用
打了日志,事实上被调用了,完美地未执行那条命令。另外,我发现如果我在我那个bat文件中写个notepad,整个程序会卡住。我想肯定是在执行命令地时候因为某种原因无法执行卡住了。
乔巴好萌 2014-08-22
  • 打赏
  • 举报
回复
设个断点调试下 在程序入口随便打点log 看open_file有没有被调用

37,717

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧