Os.getcwd() для другого диска в Windows
Согласно http://docs.python.org/library/os.path.html
"В Windows существует текущий каталог для каждого диска"
Это вызывает некоторые проблемы при использовании os.getcwd()
в Windows.
Я использую Python 2.7 на своем диске C, чтобы вызвать script, расположенный на общем сетевом диске F:. Тем не менее, os.getcwd()
изнутри этого script возвращает каталог на моем диске C.
Есть ли что-нибудь, что я могу сделать, чтобы получить рабочий каталог для моего диска F?
Ответы
Ответ 1
На самом деле это зависит:
Если Python запускается напрямую (не проходя через cmd.exe), то да, у вас есть только один текущий каталог (он, как всегда, указывает cd/d...):
--> import os
--> os.getcwd()
'c:\\source\\dbf-dev'
--> os.chdir('z:')
--> os.getcwd()
'Z:\\'
--> os.chdir('c:') # assumes root directory
--> os.getcwd()
'C:\\'
Но если вы запустите Python из cmd.exe, вы получите историческую перспективу:
>>> import os
>>> os.getcwd()
'Z:\\perm-c'
>>> os.chdir('c:') # does not assume root directory
>>> os.getcwd()
'C:\\Source\\Path'
>>> os.chdir('d:')
>>> os.getcwd()
'D:\\'
>>> os.chdir('l:')
>>> os.getcwd()
'L:\\'
>>> os.chdir('l:\\letter')
>>> os.getcwd()
'l:\\letter'
>>> os.chdir('z:')
>>> os.getcwd()
'Z:\\perm-c'
>>> os.chdir('l:\\')
>>> os.getcwd()
'l:\\'
Несомненно, это артефакт cmd.exe, делающий свое дело за кулисами.
Чтобы ответить на ваш исходный вопрос, хотя - единственный способ узнать текущий каталог на диске f: есть
- 1), чтобы запустить Python из cmd.exe
- 2) os.chdir() в 'f:'
- 3) os.getcwd()
- 4) os.chdir() назад (при желании)
Ответ 2
Это фактически неверно. Каждый процесс имеет один рабочий каталог. Для разных дисков нет отдельного рабочего каталога.
В исторической перспективе прочитайте статью статьи Раймонда Чена.
Ответ 3
Я считаю, что секция, которую вы читаете, изложена плохо. Для вашего сеанса python существует только один текущий рабочий каталог, и вы получаете его от os.getcwd()
. Вы можете использовать os.chdir(r'F:\')
, чтобы сменить каталоги на ваш диск F.
Часть, ссылающаяся на эту цитату, относится к методу os.path.join
. Это означает, что для первого аргумента 'C:'
вместо r'C:\'
вы получите неправильный путь (а именно C:path
вместо C:\\path
).