我的应用程序中有一个函数调用subprocess.popen
来调用.exe应用程序,该应用程序使用Microsoft.Office.Interop.Excel库打印Excel文件,当我使用manage.py runserver
启动服务器时调用非常顺利,我的.exe完成了这项工作,但是当我启动apache服务器时(即使是管理员用户),除了子进程部分之外的所有其他内容都是正确的,并且它根本不会调用该命令。
我在我的exe中放了一些Console.Write
来帮助我知道问题出在哪里。当我使用django服务器运行时,一切正常,但是随着apache,Interop会抛出这个错误:
Microsoft Excel no puede obtener acceso al archivo 'E://Documents/092647282000.xls'. Puede haber varios motivos:
\x07 El nombre o la ruta del archivo no existen.
\x07 Otro programa est\xa0 usando el archivo.
\x07 El libro que est\xa0 intentando guardar tiene el mismo nombre que otro libro que est\xa0 abierto en estos momentos.
基本上它说无法找到文件或其他程序正在使用它,或者我试图保存的书名相同(但我只是打开它,而不是保存它)。使用builtin django runserver
命令
如何让apache运行此系统(控制台)命令?
args = []
args.append('ImprimirExcel.exe')
args.append(a)
args.append(self.impresora)
proc = subprocess.Popen(args, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True,
close_fds=False)
(stdout_txt, stderr_txt) = proc.communicate("")
proc.wait()
logging.error('%d %s %s' % (proc.returncode, stdout_txt,
stderr_txt))
logging.error(args)
注意:
我正在使用logging.error
使XAMPP将此消息保存在错误日志中(更易于访问)。
我正在使用带有XAMPP的Windows 8
我使用python 2.7,Django 1.7和apache与Xampp(Apache / 2.4.7(Win32)OpenSSL / 1.0.1e mod_wsgi / 3.5 Python / 2.7.8 PHP / 5.5.6)
这是我的httpd.conf
...
LoadModule wsgi_module modules/mod_wsgi.so
...
WSGIScriptAlias /App "E:/Documents/App/App/App/wsgi.py"
Alias /media "E:/Documents/App/App/media"
Alias /static "E:/Documents/App/App/static"
<Directory "E:/Documents/App/App/static">
Require all granted
</Directory>
<Directory "E:/Documents/App/App/media">
Require all granted
</Directory>
<Directory "E:/Documents/App/App">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
答案 0 :(得分:0)
stdout = PIPE使用父进程的stdout(即wsgi模块),但在这种情况下,它被关闭。
https://docs.python.org/2/library/subprocess.html#subprocess.PIPE
https://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIRestrictStdout