Как получить временный путь, используя pytest tmpdir.as_cwd - PullRequest
2 голосов
/ 12 апреля 2019

В тестовой функции Python

def test_something(tmpdir):
    with tmpdir.as_cwd() as p:
        print('here', p)
        print(os.getcwd())

Я ожидал, что p и os.getcwd() даст тот же результат.Но в действительности p указывает на каталог тестового файла, тогда как os.getcwd() указывает на ожидаемый временный файл.

Это ожидаемое поведение?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Посмотрите документы py.path.as_cwd:

возвращает менеджер контекста, который изменяется на текущий каталог во время управляемого контекста «с». На __enter__ возвращается старый каталог.

Таким образом, наблюдаемое вами поведение является правильным:

def test_something(tmpdir):
    print('current directory where you are before changing it:', os.getcwd())
    # the current directory will be changed now
    with tmpdir.as_cwd() as old_dir:
        print('old directory where you were before:', old_dir)
        print('current directory where you are now:', os.getcwd())
    print('you now returned to the old current dir', os.getcwd())

Просто помните, что p в вашем примере - это не "новый" текущий каталог, на который вы меняете, а "старый", с которого вы изменили.

0 голосов
/ 12 апреля 2019

Из документации:

Вы можете использовать прибор tmpdir, который обеспечит временный каталог, уникальный для тестового вызова, созданный во временной базе каталог.

Принимая во внимание, что getcwd обозначает Get Current Working directory и возвращает каталог, из которого был запущен ваш процесс python.

...