2012-12-31 25 views
2

解決方案:正如Thomas指出的,我得到的任務幾乎不可能實現,並且數據必須在使用模板結構後確定由任何操作系統可以相當容易地覆蓋,並且從來沒有一種方法可以保證預構建的模板可以正確應用。我向所有回覆的人表示感謝(即使我是密集起來以獲得它)...-Ppython os.path.expanduser()這是否總是如此

我目前無法訪問基於Mac或Windows的計算機,而且我正在一個跨平臺的項目(Win/Lin/Mac)。

在Linux上從一個電話

os.path.expanduser('~') 

回報/home/<user>在任何操作系統

現在$ HOME目錄結構中含有最後一點是共同的所有路徑,(在我的Linux返回安裝主路徑默認爲/home/<user>,使/home成爲最後的共同點)。

所以我的問題(我現在不能簡單地測試)是這樣的: 在windows和mac上,除了一些不尋常的重新配置(軟件產品是針對普通的joe家庭用戶和青少年)是返回的最後部分路徑始終是第一個非公共路徑部分?

(這個問題可以更加清楚,但我絆了這怎麼解釋這是改寫三項)

編輯:讀出由下面的評論phihag鏈接的文章之後,我覺得他是要求更好地說明我的預期用途(不可能的規格說明)。 我想要做的是確定從os.path.expanduser('~')返回的部分,我可以將其轉換爲新的相對路徑定義的第一部分,然後我可以從中創建針對每個用戶的特定於應用程序的更多目錄結構。相當於/home/<user>/.config/<MyAppHere>\Documents and Settings\<user>\Application Data\Roaming\<MyAppHere>。我的最終結果將使用(如果這個問題能爲我的意圖來確定真)以下:

# Assumes linux system and home path of /home/<user 
head, tail = os.path.split(os.path.expanduser('~')) 
userConfigPath = os.path.join(tail,'.config',MYAPPNAME) 

# userConfigPath then gets written to a config file which is used by the program 
# to determine where (within a greater structure) to look for a user based 
# configuration which expands or overrides system configuration options. 

編輯:托馬斯·奧羅斯科(下)交換信息後: 在這個階段,軟件執行的,這不是不知道在哪裏尋找自定義用戶配置。從配置文件讀取什麼不是絕對地址,而是如何爲配置文件構建絕對地址的模板。

有問題的軟件與視頻遊戲有關,並且具有青少年或成年人在標準家用計算機上工作的預期用戶羣。大多數這些用戶不使用特殊的配置選項,如定製的家庭用戶目錄位置。這部分代碼適用於任何操作系統的所謂規範,並且無視對所討論的操作系統進行自定義的可能性。雖然是不好的做法編程,這是我目前堅持。

+0

我不會認爲這是真的。在Windows中,RDS的主目錄最終會出現在陌生的地方。 –

+2

甚至在幾乎所有的Linux機器上都是如此。即使掛載'/ home'失敗,root也必須能夠登錄;因此'〜root'通常只是'/ root'。你能描述一下你的問題嗎?沒有冒犯,但要小心[將問題分解成兩部分,一個簡單和一個不可能]的常見謬誤(http://blogs.msdn.com/b/oldnewthing/archive/2011/11/04/10233798。 ASPX)。 – phihag

+0

@ Guy什麼是RDS? @ phihag程序拒絕以超級用戶身份運行(現在閱讀你的鏈接) – Jase

回答

4

這在Linux上甚至沒有。只要看看/etc/adduser.conf

  • GROUPHOMES=yes會讓adduser創建家園,如:/home/groupname/user.
  • LETTERHOMES=yes會創造的人看起來像:/home/u/user

而這只是默認設置。你可以把你放在任何你喜歡的地方。


關於你想要達到的目標,爲什麼不是以下適當的?

from os.path import join, expanduser 
join(expanduser('~'), '.config') # You could have something more funky if you want to. 

然後,只需在運行應用程序時即時計算此路徑,而無需將其硬編碼到您的應用程序中。

+0

你在代碼中提出的建議是關於我試圖實現的目標。但是,我試圖修剪用戶主目錄路徑的第一部分,而不是最終結果。你的代碼(插入上面的例子中)會給出'/ home//.config',我試圖結束的是'/.config',它將它有效地轉換爲完全合格的相對路徑。 – Jase

+1

@Jase但是**爲什麼**你想要這樣做?你正在尋找的路徑是〜/ .config'。 –

+0

配置文件緩慢地構建軟件使用的路徑結構。所以在一個地方,我有一個值將'/ home'或'c:\ Documents and Settings'設置爲系統對於家庭結構的骨骼。另一行將'%(baseHome)s//.config'設置爲它們的自定義配置位置。 – Jase

相關問題