어떤 이유로 내 시스템은 이름 없이 환경 변수를 설정합니다. 이는 Python에 문제를 일으키는 개체(더 구체적으로 개체) printenv
만 포함하는 줄인 출력에서 볼 수 있습니다 .=
os.environ
이 환경 변수를 어떻게 설정 해제할 수 있나요? 다른 해결 방법이 있습니까(예: 변수가 처음에 설정되지 않도록 방지)?
예제를 재현 env -i printenv
하거나 Python 문제의 경우 다음을 실행하세요.env -i = python -c "import os; os.environ.clear()"
답변1
환경 변수는 빈 이름을 가져서는 안 되므로 많은 유틸리티가 이를 지원하지 않습니다.
GNU coreutils 명령은 env
빈 이름으로 환경 변수 설정을 지원하지만 설정을 해제할 수는 없습니다. 이것은 실수입니다.
$ env '=wibble' env |grep wibble
=wibble
$ env '=wibble' env -u '' env
env: cannot unset `': Invalid argument
일반 쉘은 빈 이름을 설정 해제할 수도 없습니다. 괜찮습니다. 빈 이름은 환경 변수나 쉘 변수로 사용하면 안 되기 때문입니다. Zsh에는 결함이 있는 유일한 제품입니다. 작업을 수행하는 척하지만 실제로는 아무것도 수행하지 않습니다.
$ env '=wibble' dash -c 'unset ""'
dash: 1: unset: : bad variable name
$ env '=wibble' bash -c 'unset ""'
bash: line 0: unset: `': not a valid identifier
$ env '=wibble' ksh -c 'unset ""'
ksh[1]: unset: : invalid variable name
$ env '=wibble' mksh -c 'unset ""'
mksh: : is read only
$ env '=wibble' posh -c 'unset ""'
posh: unset: is read only
$ env '=wibble' zsh -c 'unset ""'
$ env '=wibble' zsh -c 'unset ""; env' | grep wibble
=wibble
아시다시피 Python은환경 변수에 대해 빈 이름을 찾으면 오류가 발생합니다..
펄그런 문제는 없으므로 해결 방법이 될 수도 있습니다. 외부 프로세스를 사용하여 환경을 변경하려면 새 셸을 실행해야 합니다.
perl -e 'delete $ENV{""}; exec $ARGV[0] @ARGV' "$SHELL" "-$-"
답변2
넌 할 수있어:
import os
for k in os.environ.keys():
print repr(k)
del os.eniviron[k]
print os.environ
os.environ.clear()
os.environ.clear()
오류가 발생한 이유를 잘 모르겠으므로 위의 for 루프 코드를 시작하여 문제의 원인을 찾을 수 있는지 확인했습니다. 을 지정해야 합니다. 반복하는 키의 사전을 변경(사본 생성)하기 때문에 .keys()
using을 반복하면 오류가 발생합니다 .for k in os.environ:
.keys()