기본 운영 시스템/쉘은 파이썬에 대한 실제 경로를보고합니다.
따라서 os.getcwd()
은 C 라이브러리 getcwd()
함수에 대한 랩 된 호출이므로 실제로는 그럴 방법이 없습니다.
pwd
을 시작하는 것으로 이미 알고있는 해결 방법이 있습니다.
또 다른 하나는 os.environ['PWD']
을 사용하는 것입니다. 해당 환경 변수가 설정된 경우이를 고려하는 일부 getcwd
함수를 만들 수 있습니다.
import os
from subprocess import Popen, PIPE
class CwdKeeper(object):
def __init__(self):
self._cwd = os.environ.get("PWD")
if self._cwd is None: # no environment. fall back to calling pwd on shell
self._cwd = Popen('pwd', stdout=PIPE).communicate()[0].strip()
self._os_getcwd = os.getcwd
self._os_chdir = os.chdir
def chdir(self, path):
if not self._cwd:
return self._os_chdir(path)
p = os.path.normpath(os.path.join(self._cwd, path))
result = self._os_chdir(p)
self._cwd = p
os.environ["PWD"] = p
return result
def getcwd(self):
if not self._cwd:
return self._os_getcwd()
return self._cwd
cwd = CwdKeeper()
print cwd.getcwd()
# use only cwd.chdir and cwd.getcwd from now on.
# monkeypatch os if you want:
os.chdir = cwd.chdir
os.getcwd = cwd.getcwd
# now you can use os.chdir and os.getcwd as normal.
감사! getcwd()는 자체 인수가 필요합니다 - 완벽하게 작동한다는 것 외! – Moe
괜찮습니다. 고마워요. 고마워요. – nosklo