tempfile.mkdtemp () разница на osx? - PullRequest
2 голосов
/ 05 ноября 2019

Следующий модульный тест проходит на всех комбинациях linux / python и windows / python:

import os
import tempfile
from contextlib import contextmanager

def test_cd_to_tempdir():
    initial_cwd = os.getcwd()
    abspath_tmpdir = tempfile.mkdtemp()
    try:
        assert os.path.isabs(abspath_tmpdir)
        os.chdir(abspath_tmpdir)
        curdir = os.getcwd()
        assert initial_cwd != curdir
        assert curdir == abspath_tmpdir
    finally:
        os.chdir(initial_cwd)      # must exit directory..
        os.rmdir(abspath_tmpdir)   # ..before it can be removed

и завершается с ошибкой на osx (проверено только 3.7.4) со следующей ошибкой:

        try:
            assert os.path.isabs(abspath_tmpdir)
            os.chdir(abspath_tmpdir)
            curdir = os.getcwd()
            assert initial_cwd != curdir
>           assert curdir == abspath_tmpdir
E           AssertionError: assert '/private/var...T/tmpoz7eo_yj' == '/var/folders/...T/tmpoz7eo_yj'
E             - /private/var/folders/17/5mc7816d3mndxjqgplq6057w0000gn/T/tmpoz7eo_yj
E             ? --------
E             + /var/folders/17/5mc7816d3mndxjqgplq6057w0000gn/T/tmpoz7eo_yj

Я не макинтош, поэтому я не знаю, как работает префикс /private/ (некоторые поиски в Google заставляют меня поверить, что это Mac-эквивалент Windows %APPDATA%).

Есть ли способ написать этот код кросс-платформенным способом?

(ход travis на https://travis -ci.org / datakortet / yamldirs / jobs / 607842061 , если кто-нибудьзаинтересован).

1 Ответ

3 голосов
/ 06 ноября 2019

/tmp является символической ссылкой на /private/tmp в macOS (то же самое относится и к /var). См. Межсайтовый Q & A Почему / tmp является символической ссылкой на / private / tmp?

Итак, чтобы написать это кроссплатформенно, вы можете просто разрешить ссылки:

assert os.path.realpath(curdir) == os.path.realpath(abspath_tmpdir)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...