在apache2 + uwsgi和命令行中运行python代码之间的区别是什么?

时间:2012-11-06 09:11:26

标签: python apache2 execution uwsgi

考虑以下python代码(在所有情况下作为apache服务器的用户运行):

import subprocess as sp
_fname_in ='/path/to/existing/dir/file_in.pdf'
_fname_out='/path/to/existing/dir/file_out.pdf'
_from_page=1
_to_page=4
cmd = [
    '/usr/bin/pdftk',
    'A=%(_fname_in)s'%locals(),
    'cat',
    '%(_from_page)s-%(_to_page)s'%locals(),
    'output',
    '%(_fname_out)s'%locals(),
]
p = sp.Popen(cmd,stdout=sp.PIPE,stderr=sp.PIPE)
output, errors = p.communicate()

上面的代码在uwsgi和ipython中运行时表现不同:

  • ipython - 简单地运作。
  • 当通过apache + uwsgi访问时,代码只会卡在最后一行。

当发生这种情况时,ps输出显示与该命令相关的2个进程:

  1. 使用uwsgi python的PID的PPID进行shell调用,cmd行如下:

    sh -c / usr / bin / pdftk A /path/to/existing/dir/file_in.pdf

  2. pdftk进程本身,这个“A<>”东西。
  3. 注意'='替换为' '的内容 现在,如果我从ipython运行该命令,我将获得第三个行为:来自pdftk的语法错误。 让我感到困惑的是,相同的命令,在相同的SHELL下呈现不同的结果。

    请解释为什么会发生这种情况......

0 个答案:

没有答案