Python からシェル スクリプトを呼び出すプログラムがあります。シェル スクリプトでは、mdbtools の .so を指定して、LD_LIBRARY_PATH に追加します。
NEWPATH=${PWD}"/mdbtools/usr/lib/x86_64-linux-gnu"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NEWPATH
コードのこの部分は正しいと確信しています。次に、入力の変数を使用して、.so からプログラムの 1 つを「mdb-export」と同様に呼び出します。:
mdb-export ${1} Athlete > "${2}athlete.csv"
ここが紛らわしい部分です。コマンドラインからスクリプトを呼び出すと
./buildscvs abcd.mdb 1234
それは完全に機能します。csv は期待どおりに入力されます。ただし、Python からスクリプトを呼び出すと、次のようになります。
try:
p = Popen([cmd, filename, prepend], stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True).communicate()[0]
print "p", p
except Exception as e:
print str(e)
cmd、filename、および prepend は次のとおりです。
filename = /app/djangoFiles/meetPlanner/2011ROXBURY.mdb
cmd = /app/djangoFiles/meetPlanner/buildcsvs.sh
prepend = 824365891
csvは空白になります。これは、実行した場合のように、未知のプログラム名でコマンドを実行したときに起こることと一致しているようです
abcd 1234.mdb > test.csv
何が起こっているのか誰にも分かりませんか?あなたが私に与えることができるどんな助けにも感謝します
ありがとうございました!
編集
subprocess.check_call() に変更後
以下に示すように、次のエラー メッセージが表示されます。
/mdb-export: error while loading shared libraries: libmdb.so.2: cannot open shared object file: No such file or directory