2014-01-07 40 views
6

我正在嘗試編寫一個python腳本來使用Plex Media Scanner自動掃描一段plex。爲此,我必須以運行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) 

現在我已經有一個工作版本,做什麼,我想要它做的,但我不得不求助於使用包裝bash腳本這樣做。你可以看到下面的代碼:

#!/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'中的'-'使其成爲重新初始化環境的登錄shell。 – jordanm

回答

1

由於jordanm在他的評論中指出:

的 - 蘇使其成爲一個登錄shell其重新初始化環境。