我有这样的方法
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 :(得分:3)
这里我不知道它为什么打印0o755打印493
因为它们是非常相同的值,一个是八进制的,一个是十进制的:
>>> 0o755
493
>>> '{:o}'.format(0o755)
'755'
一旦转换为数值,它存储的int对象就不会指示最初使用的是什么库。在这种情况下使用Octal是因为Unix文件权限便于在3位组中进行分组:对于所有者,组和其他权限(每个权限包含读,写和执行位),每个都获得一个数字。其他常见的基础包括2(二进制),16(十六进制)和64(base64 - 用于在文本协议(如电子邮件)中传输二进制数据)。
答案 1 :(得分:2)
默认情况下,数字的字符串表示形式以10为基数。要将其打印为八进制数,可以使用str.format()
:
perms = 0o755
log.debug("Setting permission of file {} to {:o}".format(path, perms))
格式说明符中的 'o'
代表“八进制格式”。
答案 2 :(得分:0)
SymbolicToOctal(“ rw-r -----”);
公共静态字符串SymbolicToOctal(String permString) {
String octalPerm = "";
String ocatalString = "";
int secondInd = 0;
for (int x = 0; x < 3; x++) {
if (x == 0) {
ocatalString = permString.substring((x * 3), x + 3);
secondInd = x + 3;
} else {
ocatalString = permString.substring((x * 3), (secondInd +3));
secondInd = secondInd +3;
}
octalPerm += CalculatePermissionSum(ocatalString);
}
return octalPerm;
}
public static int CalculatePermissionSum(String permString)
{
int octalPerm = 0;
for (char a: permString.toCharArray())
{
switch (a)
{
case 'r':
octalPerm += 4;
break;
case 'w':
octalPerm += 2;
break;
case 'x':
octalPerm += 1;
break;
case '-':
octalPerm += 0;
break;
}
}
return octalPerm;
}