2014-01-07 12 views
6

Plex Media Scannerを使用してプレックスのセクションを自動的にスキャンするPythonスクリプトを作成しようとしています。これを行うには、プレックスを実行するユーザー(この場合は 'プレックス')としてスキャナを実行し、環境変数 '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これは私が試したさまざまなバリエーションの1つに過ぎません。私はかなり長い間それをしてきたので、物事が混ざり合った。なぜなら、envを出力すると変数があるが、スキャナはそれでも必要なライブラリを見つけることができないと不平を言うからだ。 – pyarmak

+0

@pyarmak 'su'の' -'は、環境を再初期化するログインシェルにします。 – jordanm

答えて

1

jordanmが彼のコメントで述べたように:

- suコマンドでは、環境を初期化し、再ログインシェルになります。

関連する問題