我有一個程序,從python調用shell腳本。在shell腳本中,我像這樣添加到LD_LIBRARY_PATH中,從mdbtools指向.so。shell腳本,Python,ld_library
NEWPATH=${PWD}"/mdbtools/usr/lib/x86_64-linux-gnu"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NEWPATH
我敢肯定,這部分代碼是正確的。然後,我使用.so來調用其中一個程序「mdb-export」,使用輸入中的變量。 :
mdb-export ${1} Athlete > "${2}athlete.csv"
這是令人困惑的部分。當我從命令行調用腳本時
./buildscvs abcd.mdb 1234
它完美地工作。 csvs按預期填充。然而,當我調用腳本從蟒蛇:
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 = /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
爲什麼在不使用stdin和stdout的情況下將stdin和stdout重定向到管道?只需使用'subprocess.check_call()',並打印任何stdout和stderr,這將使調試變得非常容易。 –
幫助 - 謝謝!現在我在加載共享庫時遇到這個'/ app/djangoFiles/meetPlanner/mdb-export:error:libmdb.so.2:無法打開共享目標文件:沒有這樣的文件或目錄。當我從終端運行它時,不會出現這種情況。有任何想法嗎? – mythander889