Ich versuche ein Python-Skript zu schreiben, um automatisch einen Plex-Bereich mit dem Plex Media Scanner zu scannen. Dazu muss ich den Scanner als Benutzer ausführen, der plex ausführt (in diesem Fall ist es "plex"), und ihn mit der Umgebungsvariable "LD_LIBRARY_PATH" versehen. Ich habe versucht, sowohl subprocess.call und subprocess.Popen ohne Unterschied zu verwenden. In beiden Fällen bekomme ich keine Ausgabe. Hier ist der Code ich verwende:Aufrufen eines Subprozesses in Python mit Umgebungsvariablen
#!/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)
Jetzt schon habe ich eine funktionierende Version das tut, was ich will es tun, aber ich musste mit einem Wrapper-Bash-Skript greifen, dies zu tun. Sie können den Code unten:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver
/usr/lib/plexmediaserver/Plex\ Media\ Scanner [email protected]
Und die entsprechende Zeile des Skripts, die es nennt:
exitCode = subprocess.call("/bin/su - plex -c '/var/lib/deluge/delugeScripts/pms.sh -s -c 2'", shell=True)
Vielen Dank für Ihre Hilfe.
Ich bezweifle, dass es wichtig ist, aber warum 'shell = true' im ersten Codeausschnitt? – mgilson
@mgilson Dies war nur eine der verschiedenen Varianten, die ich ausprobiert habe. Ich bin schon eine ganze Weile dabei, also haben sich die Dinge vermischt. Es ist seltsam, denn wenn ich env drucke, hat es die Variable, aber der Scanner beschwert sich immer noch, dass er die benötigten Bibliotheken nicht finden kann. – pyarmak
@pyarmak das '-' in' su' macht es zu einer Login-Shell, die die Umgebung neu initialisiert. – jordanm