使用popen时访问被拒绝 - Python

时间:2010-06-15 21:28:02

标签: python windows django cmd popen

我正在使用 popen ,以便在 Django应用中发送一些命令。

问题是我得到 [错误5]访问被拒绝,显然我无权访问popen似乎使用的 cmd.exe

  

WindowsError / test / cmd /

     

[错误5]访问被拒绝:'C:\ WINDOWS \ system32 \ cmd.exe / c dir'

我认为这是因为该应用程序位于具有有限权限的Web服务器后面。


我们能做些什么吗?帮助太棒了!

1 个答案:

答案 0 :(得分:4)

为什么遇到问题:

您在问题中忘记提到的是,您尝试使用ISAPI>在IIS下运行它。 ISAPI_WSGI(或IIS 7/6上的FastCGI,使用flup作为WSGI的FastCGI包装器)。

这确实是c:\ windows \ system32 \ cmd.exe

上的执行权限问题

我在IIS 6上遇到了完全相同的问题。使用池设置,认为将池用户设置为“本地系统”或类似的东西会修复它。无论我将池设置为什么用户,我总是会拒绝访问。我愚蠢地认为cPython管道有问题,导致在同一台机器上IronPython下的运行命令工作。

以下是解决问题的方法:

一个。

放宽IIS服务或c:\ windows \ system32 \ cmd.exe上的用户权限 (放宽对应用程序池的权限,对IIS进程拥有严格的权限对我没有帮助。我的猜测是ISAPI> ISAPI_WSGI的运行权限仅限于IIS进程的权限。)

必须直接添加运行IIS(Web发布)服务的用户,或者至少有一个在c:\ windows \ system32 \ cmd.exe上具有读取,执行权限的组

我没有尝试的事情:我想知道如果不改变IIS服务的用户权限,改变“匿名”背后的用户就行了。

如果您认真考虑让它在Windows上运行,请考虑放弃cPython for IronPython + NWSGI(在CodePlex上查找)我使用NWSGI作为简单的WSGI应用程序,并使用专门为IronPython编写的subprocess.py运行子进程。 (就在这里:http://bitbucket.org/jdhardy/code/src/126ce1f8fddd/subprocess.py查看同一个jdhardy的其他回购。他有一些专门用于让Django在.Net,IronPython上工作的补丁。)