python subprocess.popen 不尊重 LD_LIBRARY_PATH

jon*_*opf 5 python dll subprocess

我正在尝试使用 python 脚本中的以下代码从 python 生成一个子进程:

p = subprocess.Popen(['./appleseed.cli', '--version'])
Run Code Online (Sandbox Code Playgroud)

问题是该命令依赖于共享库,因此出现以下错误

./appleseed.cli: error while loading shared libraries: libappleseed.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在系统中有主要的二进制文件,PATH也有 lib ,LD_LIBRARY_PATH但这似乎没有帮助。这些设置在~/.bash_profile.

有趣的是,如果我在交互式 python 会话中运行相同的代码,它也可以工作,同时也将命令指定为appleseed.cli没有./工作。

我正在运行 ubuntu 和 python 2.7

更新:

这是我正在使用的完整 python 文件:

import argparse
import subprocess


def print_appleseed_version(args):

    p = subprocess.Popen(['./appleseed.cli', '--version'])


def main():
    # Parse the command line.
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--tool-path", metavar="tool-path")
    args = parser.parse_args()
    
    print_appleseed_version(args)


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我从命令行运行此代码,如下所示:

sudo python ../test.py -t appleseed.cli
Run Code Online (Sandbox Code Playgroud)