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)
感謝您的幫助。
我懷疑它的問題,但爲什麼'shell = True'在第一個代碼片段? – mgilson
@mgilson這只是我試過的不同變化之一。我已經呆了很長一段時間,所以事情混雜在一起。這很奇怪,因爲當我打印env時它有變量,但是然後掃描器仍然抱怨它找不到它需要的庫。 – pyarmak
@pyarmak'su'中的'-'使其成爲重新初始化環境的登錄shell。 – jordanm