Миграция на Linux из Windows - PullRequest
       6

Миграция на Linux из Windows

0 голосов
/ 06 января 2011

У меня есть Python GUI, который обращается к файлам в Windows как C: \ data и C: \ MyDIR, все за пределами моего документа.На Linux OS я создал / данных и / MyDIR.

Мой графический доступ не может.Я предвижу всегда использовать C: \ data и C: \ MyDIR в обеих системах.

Как исправить код или разрешения Linux, чтобы иметь доступ как к каталогам, так и к подкаталогам.

Ответы [ 6 ]

5 голосов
/ 06 января 2011

Поместите данные в каталог, который Python считает домашним каталогом пользователя на любой платформе.

home = os.path.expanduser('~')
datadir = os.path.join(home, '.yourappname')

Если вам не нравится добавлять префикс имени к точке, вы можете использовать что-то вроде этоговместо этого:

home = os.path.expanduser('~')
if os.name == 'posix':
    datadir = os.path.join(home, '.yourappname')
else:
    datadir = os.path.join(home, 'Your App Name')

(Также некоторые приложения больше не используют ~/.yourappname в Unix-подобных операционных системах, и есть предпочтение для ~/.local/share/yourappname: os.path.join(home, '.local', 'share', 'yourappname').)

Важно помнить: поместите его где-нибудь в каталог, в который расширяется '~', и включите в него имя своего приложения, чтобы избежать конфликтов с каталогами данных других приложений.

5 голосов
/ 06 января 2011

Chmod - твой друг.

Однако я ставлю под сомнение ваш дизайн. Почему вы хотите иметь привилегии на таких высоких уровнях файловых систем. Вы знаете, что у каждого пользователя есть домашний каталог, и всегда есть каталог для конфигурации как в Windows, так и в Linux.

То, что вы делаете, - плохая практика.

1 голос
/ 06 января 2011

я создал \ data and \ MyDIR

Во-первых, нет, ты не сделал. Пути используют / в Linux, а не \.

Во-вторых, НЕ создавайте каталоги в корневом каталоге, если вы точно не знаете, что делаете. Да, этим вы не причините вреда, но это крайне плохая практика, и ее следует избегать, за исключением особых случаев.

Linux - многопользовательская ОС. Если у вас есть файлы конфигурации, в которые пользователь может писать, они должны находиться где-то в домашнем каталоге пользователя. Если у вас есть конфигурационные файлы, которые доступны только для чтения, они должны быть установлены где-то, например /etc/.

1 голос
/ 06 января 2011

Файловая система linux использует / как root.Вы не можете использовать \ data и \ MyDir, потому что \ ничего не значит.Более того, владельцем по умолчанию для / является пользователь с именем root.Обычно на компьютере вы работаете с пользователем, отличным от пользователя root.

Поэтому по умолчанию у вас нет прав на запись или создание чего-либо в /.

Выберите другой каталог в вашемдомашний каталог.Например:

~ / data / & ~ / MyDir /

~ / равно / home / user428862 / где user428862 - ваше имя пользователя на компьютере.

1 голос
/ 06 января 2011

Прежде всего, может быть, вы хотели сказать / data и /MyDIR.

Во-вторых, они прямые потомки /, корневой файловой системы, которая зарезервирована для суперпользователя (root) и людей, которые знают, что они делают. К сожалению, мир Windows не применяет и не поощряет передовой опыт, поэтому вы смогли создать эти два каталога в своем корне C: (в значительной степени аналог каталога /). Короче говоря, вероятно, вам пришлось использовать root (вероятно, замаскированный под sudo), чтобы сделать эти две директории внутри /, что означает, что root является их владельцем, и у него (и только у него) есть право писать внутри них.

Вам лучше создать несколько похожих папок в вашем доме (cd ~ и вы там), используя своего обычного пользователя (потому что у вас есть обычный пользователь, не так ли?), А затем использовать им.

С другой стороны, вы можете использовать что-то вроде fuse и ntfs-3g для доступа к этим двум каталогам в исходной файловой системе ntfs, соответствующей C:

0 голосов
/ 06 января 2011

Где вы создали эти каталоги в Linux? Под $ HOME? Вы можете определить разделитель пути, используя строку 'sep' из модуля os, то есть os.sep, а затем действовать в соответствии с его возвращаемым значением. Мне приходит в голову что-то вроде:

импорт ОС

dirs = [os.sep + "data", os.sep + "MyDIR"]

Но все зависит от того, что вы хотите сделать. Если можете, объясните, пожалуйста, ваши потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...