我有一个从python调用shell脚本的程序。在shell脚本中,我像so一样添加到LD_LIBRARY_路径,指向mdbtools中的.so。在
NEWPATH=${PWD}"/mdbtools/usr/lib/x86_64-linux-gnu"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NEWPATH
我很确定这部分代码是正确的。然后我从.so调用其中一个程序,“mdb export”,就像这样,使用输入中的变量。公司名称:
^{pr2}$这是令人困惑的部分。当我从命令行调用脚本时
./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_调用()
如下所示,我现在收到以下错误消息:
/mdb-export: error while loading shared libraries: libmdb.so.2: cannot open shared object file: No such file or directory
您不仅必须检查
stdout
,而且还必须检查stderr
。在你还写了你设置
LD_LIBRARY_PATH
,但是在哪里呢?在脚本中还是在python程序中?如果在python程序中,必须在Popen
调用中传递环境哈希,但不能这样做。在你得到的错误
^{pr2}$表示
LD_LIBRARY_PATH
设置不正确(或根本没有设置)。在更新
好的,现在我们知道您在脚本中设置了
LD_LIBRARY_PATH
。 别忘了出口。在相关问题 更多 >
编程相关推荐