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 を使用したシェル呼び出し。コマンド行は次のとおりです。

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

  2. pdftk プロセス自体、この「A <>」何かで。

Now, if I are running that the very command from ipython '=', ' ' I am get 3rd behaviour: a syntax error from pdftk. 私を混乱させるのは、同じコマンドが同じシェルの下で異なる結果をレンダリングするという事実です。

なぜこのようなことが起こるのか説明してください....

4

0 に答える 0