考虑以下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中运行时表现不同:
当发生这种情况时,ps输出显示与该命令相关的2个进程:
使用uwsgi python的PID的PPID进行shell调用,cmd行如下:
sh -c / usr / bin / pdftk A /path/to/existing/dir/file_in.pdf
注意'='
替换为' '
的内容
现在,如果我从ipython运行该命令,我将获得第三个行为:来自pdftk的语法错误。
让我感到困惑的是,相同的命令,在相同的SHELL下呈现不同的结果。
请解释为什么会发生这种情况......