Я пытаюсь написать скрипт python для автоматического сканирования раздела plex с помощью Plex Media Scanner. Для этого я должен запустить сканер как пользователь, выполняющий plex (в данном случае это «plex»), а также предоставить ему переменную окружения «LD_LIBRARY_PATH». Я пробовал использовать оба subprocess.call и subprocess.Popen без разницы. В любом случае я не получаю никакой информации. Вот код, я использую:Вызов подпроцесса в python с переменными окружения
#!/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)
Теперь у меня уже есть рабочий вариант, который делает то, что я хочу, чтобы это сделать, но мне пришлось прибегнуть к помощи обертка Баш скрипт, чтобы сделать это. Вы можете увидеть код ниже:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver
/usr/lib/plexmediaserver/Plex\ Media\ Scanner [email protected]
И соответствующую строку сценария, который называет его:
exitCode = subprocess.call("/bin/su - plex -c '/var/lib/deluge/delugeScripts/pms.sh -s -c 2'", shell=True)
Спасибо за вашу помощь.
Я сомневаюсь, что это важно, но почему 'shell = True' в первом фрагменте кода? – mgilson
@mgilson Это был только один из вариантов, которые я пробовал. Я был в этом довольно долго, поэтому все смешивалось. Это странно, потому что, когда я печатаю env, у него есть переменная, но затем сканер все еще жалуется, что не может найти нужные ему библиотеки. – pyarmak
@pyarmak '-' в' su' делает его оболочкой входа, которая повторно инициализирует среду. – jordanm