Подтвердить что ты не робот

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?

4b9b3361

Ответ 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).