Как точно повторить поведение оболочки Windows cmd mkdir с Python? - PullRequest
1 голос
/ 18 мая 2019

Я пытаюсь найти способ программно создавать папки на моем ПК, которые выборочно синхронизируются через фильтр «Игнорировать файлы с этими расширениями» в моем хранилище Google Диска с помощью приложения «Резервное копирование и синхронизация».

Контекст:

Я запускаю файловый сервер, который я пытаюсь сделать доступным через Google Drive. Но есть некоторые папки, которые я хотел бы отфильтровать, и способ создания папок, похоже, влияет на процесс синхронизации.

Итак, на сервере у меня есть папки .workspace с большими временными файлами, которые я не хочу синхронизировать. Чтобы добиться такого поведения, я использую фильтр «Игнорировать файлы с этими расширениями». Итак, в разделе «Резервное копирование и синхронизация» я добавил расширение «.workspace» в список игнорирования.

Когда я создаю свою папку ".workspace" с функцией оболочки CMD Windows CMD - моя папка показывает правильное и ожидаемое поведение и не синхронизируется с моим облачным хранилищем GoogleDrive.

Но когда я создаю папку «.workspace» с функциями Python os - моя папка демонстрирует неправильное и другое поведение и загружается в мое облачное хранилище GoogleDrive.

Вот функции

import os
dirName = ".workspace"
os.mkdir(dirName)

OR

os.makedirs(dirName)

Это наводит меня на мысль, что внутренние процессы создания папок в Python аналогичны использованию Проводника Windows, поскольку при создании папок вручную возникает та же проблема.

Моя цель - найти функцию Python для создания папок в родном CMD-способе Window.

Есть ли у вас какие-либо указатели или есть какие-либо модули Python более низкого уровня, которые я должен использовать вместо модуля ОС?

1 Ответ

0 голосов
/ 18 мая 2019

Модуль os является прямым интерфейсом к операционной системе.Поэтому mkdir вызывает функцию Windows mkdir, которая является не "родной" функцией Windows (которая CreateDirectory), а версией POSIX.

Это неозначает, что историческая функция mkdir делает то же самое.Вероятно, он вызывает CreateDirectory напрямую.

Обычно я бы не рекомендовал выполнять системный вызов для таких базовых задач, и даже менее рекомендую использовать shell=True, но в вашем особом случае, поскольку это единственныйто, что вам подходит, вы можете вызвать команду mkdir с помощью системного вызова из python

import subprocess
# now call built-in mkdir command from Windows cmd
subprocess.check_call(r"mkdir .workspace",shell=True)

Использование shell=True в качестве mkdir является встроенным, без него команда не будет найдена какнет mkdir.exe

...