2011-01-06 4 views
0

У меня есть guythi python, который обращается к файлам в Windows как C: \ data и C: \ MyDIR за пределами моего документа. Вкл., Linux sys i created/data и/MyDIR.Перенос в Linux из Windows

My gui cant access. Я предвижу всегда использовать C: \ data и C: \ MyDIR для обеих систем.

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

ответ

5

Chmod - ваш друг.

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

Что вы делаете, это плохая практика.

+0

спасибо, что не беспокоились о плохой практике. Я хочу, чтобы каталоги на системах соответствовали. Я не хочу, чтобы мои файлы в каталогах «Мои документы» Windows. – Merlin

+0

Каталоги в обеих системах не могут «совпадать», потому что пути работают по-разному на обеих платформах. Если вы хотите иметь переносное приложение, вам необходимо использовать переносимый код, и это требует поиска соответствующих путей для каждой платформы. –

+0

ok, Как написать переносимый код «для каталогов» как для win, так и для linux. Мне придется переписать код Win, который работает сейчас. – Merlin

1

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

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

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

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

1

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

Таким образом, по умолчанию у вас нет разрешения на запись или создание чего-либо в /.

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

~/данные/& ~/MyDir/

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

1

я не создал \ данные и \ Mydir

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

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

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

+0

спасибо. Linux может быть многопользовательской ОС, но я только пользователь. И, всегда будет единственным владельцем. Мне нужен RW-каталог как для Win, так и для Linux. – Merlin

+0

Linux все равно, что вы единственный пользователь. Это не то, как он был разработан. Поскольку вы единственный пользователь, просто поместите файл в каталог '/ home/username /'. – Falmarri

5

Поместите данные в каталог 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'))

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

+0

Существует также множество приложений, использующих '~/.config/appname /' – Falmarri

+0

'~/.config/appname /' предположительно для конфигурации, а '~/.local/share/appname /' - для данных. Однако 'os.environ ['XDG_CONFIG_HOME']' и 'os.environ ['XDG_DATA_HOME']' предположительно будут использоваться, если они доступны. Может быть, 'data_home = os.environ.get ('XDG_DATA_HOME', os.path.join (home, '.local', 'share')); datadir = os.path.join (data_home, 'yourappname') 'является наиболее правильным способом выбора пути для вашего каталога данных. –

+0

Я думал по строкам .... если ОС - это Windows, то используйте codeet1 else use codeset2. Codeset1 содержит переменные для окон. Codeset2 переменные conatins для Linux .... Любая помощь в этом использовании. Codeset1 или 2 могут быть в программе/Files/database/etc. – Merlin

0

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

импорт бя

= [директорий os.sep + "данные", os.sep + "Mydir"]

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

Смежные вопросы