在apache2+uwsgi中运行python代码与在命令行中运行python代码有什么区别?

2024-04-29 05:11:17 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下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 output将显示与该命令相关的2个进程:

  1. 用uwsgi python的PID的PPID调用shell,命令行如下:

    sh-c/usr/bin/pdftk A/path/to/existing/dir/file文件_以.pdf格式

  2. pdftk进程本身,以及这个“A<;>;”的东西。你知道吗

注意用' '替换了'=' 现在,如果我运行ipython的命令,我会得到第三个行为:pdftk的语法错误。 让我困惑的是,同一个命令,在同一个SHELL下呈现不同的结果。你知道吗

请解释为什么会发生这种情况。。。。你知道吗


Tags: topath代码inpdfdirpage情况