Ich richte ein Programm ein, um meinen Computer mit unserem Schul-Proxy zu verbinden, und habe momentan so etwas:
%Vor%Aber beim Laufen bekomme ich:
%Vor%Warum passiert das bitte Leute?
Das Problem ist, dass export
kein tatsächlicher Befehl oder eine Datei ist. Es ist ein integrierter Befehl für Shells wie bash
und sh
. Wenn Sie also subprocess.Popen
versuchen, erhalten Sie eine Ausnahme, weil der Befehl export
nicht gefunden werden kann. Standardmäßig erzeugt Popen
ein os.execvp()
, um einen neuen Prozess zu erzeugen, der es nicht erlaubt, Shell-Intrinsics zu verwenden.
Sie können so etwas tun, allerdings müssen Sie Ihren Aufruf in Popen
ändern.
Sie können shell=True
angeben, um Shell-Befehle zu verwenden.
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
Unter Unix mit shell = True: Wenn args eine Zeichenfolge ist, gibt sie die Befehlszeichenfolge an, die über die Shell ausgeführt werden soll. Dies bedeutet, dass die Zeichenfolge genau so formatiert werden muss, wie sie bei der Shell-Eingabeaufforderung eingegeben würde. Dies umfasst beispielsweise das Ausgeben von Dateinamen oder Leerzeichen mit Leerzeichen in ihnen. Wenn args eine Sequenz ist, gibt das erste Element die Befehlszeichenfolge an, und alle zusätzlichen Elemente werden als zusätzliche Argumente für die Shell selbst behandelt. Das heißt, Popen macht das Äquivalent von:
Popen(['/bin/sh', '-c', args[0], args[1], ...])
export
ist keine separate Binärdatei auf Ihrem System, sondern nur ein Befehl in der Shell selbst. Verwenden Sie beispielsweise which rm
auf Ihrem System. Sie werden wahrscheinlich Folgendes sehen:
Versuchen Sie es jetzt mit which export
. Sie erhalten etwas wie:
Sie können also nicht standardmäßig einen export
Prozess / Subprozess aufrufen. Vielleicht möchten Sie sich os.putenv()
und os.environ()
statt.
Tags und Links python subprocess