Submodul Fehler mit 'Export' in Python unter Linux?

8

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?

    
Fergus Barker 14.10.2010, 01:06
quelle

2 Antworten

6

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], ...])

    
wkl 14.10.2010, 01:18
quelle
3

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:

%Vor%

Versuchen Sie es jetzt mit which export . Sie erhalten etwas wie:

%Vor%

Sie können also nicht standardmäßig einen export Prozess / Subprozess aufrufen. Vielleicht möchten Sie sich os.putenv() und os.environ() statt.

    
eldarerathis 14.10.2010 01:18
quelle

Tags und Links