0

考虑以下 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 <>”的东西。

注意现在替换'='的东西' ' ,如果我从 ipython 运行那个命令,我会得到第三种行为:来自 pdftk 的语法错误。令我困惑的是,相同的命令,在相同的外壳下呈现不同的结果。

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

4

0 回答 0