在Apache2的mod_wsgi下运行的py代码中能否使用subprocess.Popen?

2 投票
1 回答
1353 浏览
提问于 2025-04-16 02:33

我在使用subprocess.Popen的时候,遇到了在mod_wsgi下出现IOError的问题。下面这段代码在Python终端、Django的runserver和mod_python下都能正常运行。但是一旦放到mod_wsgi(版本2)下,就会失败,报错信息是:(2, '没有这样的文件或目录')。我尝试了很多不同的方法,包括使用subprocess.PIPE。我还尝试重新定义stdout,并使用httpd的指令来关闭mod_wsgi对stdout使用的警告。最近我还尝试升级到版本3。

import subprocess

input_file = 'test.html'

p = subprocess.Popen(['htmldoc','-f', 'output.pdf', '--book', input_file])

p.communicate()

len(open('output.pdf').read())

我接下来的测试计划是回到mod_python,看看这个问题是否会消失。我想知道有没有其他人也遇到过这个问题,并能给我一些建议。

1 个回答

0

这个错误信息的意思是 Popen 找不到 htmldoc。你可以通过 os.environ['PATH'] 来检查你的 $PATH 环境变量,确保 htmldoc 已经安装在其中一个路径下。

另外,你也可以使用绝对路径来调用 Popen。比如,

subprocess.Popen(['/usr/bin/htmldoc', ...

撰写回答