2014-01-07 3 views
6

Я пытаюсь написать скрипт 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) 

Спасибо за вашу помощь.

+0

Я сомневаюсь, что это важно, но почему 'shell = True' в первом фрагменте кода? – mgilson

+0

@mgilson Это был только один из вариантов, которые я пробовал. Я был в этом довольно долго, поэтому все смешивалось. Это странно, потому что, когда я печатаю env, у него есть переменная, но затем сканер все еще жалуется, что не может найти нужные ему библиотеки. – pyarmak

+0

@pyarmak '-' в' su' делает его оболочкой входа, которая повторно инициализирует среду. – jordanm

ответ

1

Как jordanm отметил в своем комментарии:

- в су делает это Войти оболочка, которая повторно инициализирует среду.

Смежные вопросы