Shell脚本、python、ld\u库

2024-06-11 22:29:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从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

Tags: path程序脚本cmdsolibraryexportshell
1条回答
网友
1楼 · 发布于 2024-06-11 22:29:03

您不仅必须检查stdout,而且还必须检查stderr。在

(stdout, stderr) = Popen([cmd, filename, prepend],  stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True).communicate()
if stderr != "":
    print stderr

你还写了你设置LD_LIBRARY_PATH,但是在哪里呢?在脚本中还是在python程序中?如果在python程序中,必须在Popen调用中传递环境哈希,但不能这样做。在

你得到的错误

^{pr2}$

表示LD_LIBRARY_PATH设置不正确(或根本没有设置)。在

更新

好的,现在我们知道您在脚本中设置了LD_LIBRARY_PATH。 别忘了出口。在

export LD_LIBRARY_PATH

相关问题 更多 >