2016-03-01 35 views
1

我有這樣代表八進制數爲海峽

def _changePerms(path, perms): 
    try: 
     os.chmod(path, perms) 
     log.debug("Setting permission of file " + path + " to " + str(perms)) 
    except Exception as e: 
     raise e 

的方法,我稱之爲像

_changePerms(path,0o755) 

的方法,但我的輸出日誌打印此:

2016-03-01 18:51:41,716 Setting permission of file path to 493 

我想要以八進制形式打印數字,而不是小數形式(八進制755 ==十進制493)。

如何將值作爲字符串打印?

+0

755八進制數(基數8)= 493十進制數(基數10) –

+0

因爲您明確使用八進制表示法...... – deceze

+0

所以如何將八進制數轉換爲str? – v1shnu

回答

2

默認情況下,一個數字的字符串表示是基地10.要打印八進制數,你可以使用str.format()

perms = 0o755 
log.debug("Setting permission of file {} to {:o}".format(path, perms)) 

格式說明'o'代表「八進制格式」。

+0

是的!這是它。謝謝 :) 。你也可以解釋如何:o將值更改爲字符串? – v1shnu

+1

@ViChU:'{}'插入下一個參數的文本。 '{2}'插入第二個參數的文本。 '{:o}'插入下一個表示爲八進制字符串的參數。您還可以指定最小寬度,浮點數的精度以及許多其他格式。見罰款文件。 –

+0

明白了!謝謝:) – v1shnu

3

在這裏,我不知道爲什麼它打印0o755打印493

因爲他們是非常相同的價值,一個八進制,一個十進制:

>>> 0o755 
493 
>>> '{:o}'.format(0o755) 
'755' 

一旦轉換到一個數值,它所存儲的int對象並不指示最初使用的是什麼基。在這種情況下使用八進制,因爲Unix文件許可方便在3位組中進行分組:每個用戶擁有一個數字,用於所有者,組和其他權限(每個權限都包含讀,寫和執行位)。其他常見的基礎包括2(二進制),16(十六進制)和64(base64 - 用於在文本協議中傳輸二進制數據,例如電子郵件)。

+0

感謝您解釋:) – v1shnu