我试图编写一个Python脚本,自动使用Plex Media Scanner扫描Plex的一个部分。为此,我必须以运行Plex的用户(在这种情况下是“plex”)身份运行扫描程序,同时提供环境变量“LD_LIBRARY_PATH”。我尝试使用subprocess.call和subprocess.Popen,但没有任何输出。以下是我使用的代码:
#!/usr/bin/python
import os
import subprocess
import shlex
env = os.environ.copy()
env['LD_LIBRARY_PATH'] = '/usr/lib/plexmediaserver'
s = "/bin/su - plex -c '/usr/lib/plexmediaserver/Plex\ Media\ Scanner -s -c 2'"
task = shlex.split(s)
exitCode = subprocess.call(task, env=env, shell=True)
现在我已经有一个工作版本,能够按照我的意愿完成任务,但是我不得不使用包装的Bash脚本来实现。您可以查看下面的代码:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver
/usr/lib/plexmediaserver/Plex\ Media\ Scanner $@
而调用它的相关脚本行:
exitCode = subprocess.call("/bin/su - plex -c '/var/lib/deluge/delugeScripts/pms.sh -s -c 2'", shell=True)
感谢您的帮助。
shell=True
? - mgilsonsu
命令中的-
会使其成为登录 shell,重新初始化环境。 - jordanm