# How to convert a string like '777' to an octal integer like 0777?

Discussion in 'Python' started by KB, Jul 31, 2005.

1. ### KBGuest

Hi,

This may be a rudimentary question:

How to convert a string like '777' to an octal integer like 0777,
so that it can be used in os.chmod('myfile',0777)?

I know the leading zero is important in os.chmod.

KB

KB, Jul 31, 2005

2. ### John MachinGuest

KB wrote:
> Hi,
>
> This may be a rudimentary question:
>
> How to convert a string like '777' to an octal integer like 0777,
> so that it can be used in os.chmod('myfile',0777)?
>
> I know the leading zero is important in os.chmod.

There is no law that says constant arguments to os.chmod have to be
expressed in octal -- it's just a historical accident that it's
convenient (for octal grokkers, anyway): there are 3 permissions (rwx)
and 2 ** 3 == 8.

Consider the following, whcih should provide enlightenment as well as

>>> print 0777, int("777", 8)

511 511
>>>

Cheers,
John

John Machin, Jul 31, 2005

3. ### KBGuest

Thanks, John.

But my point is how to keep the leading zero in 0777,
in order to be used in os.chmod('myfile', 0777)?

KB, Jul 31, 2005
4. ### Robert KernGuest

KB wrote:
> Thanks, John.
>
> But my point is how to keep the leading zero in 0777,
> in order to be used in os.chmod('myfile', 0777)?

I don't understand. The leading zero only exists in a particular string
representation. os.chmod() needs an integer, not a string. 0777 == 511.

os.chmod('myfile', 0777)
os.chmod('myfile', 511)
os.chmod('myfile', int('777', 8))

They all do *exactly* the same thing. End of story.

If you really need a string representation in octal (os.chmod()
doesn't), then use oct() on the integer.

--
Robert Kern

"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter

Robert Kern, Jul 31, 2005
5. ### KBGuest

> The leading zero only exists in a particular string
> representation. os.chmod() needs an integer, not a string. 0777 == 511.

Thanks, Robert.

What you said is exactly what I did not understand clearly,
because I am just a beginner in Python programming.

KB

KB, Jul 31, 2005
6. ### Steven D'ApranoGuest

On Sun, 31 Jul 2005 00:24:08 -0700, KB wrote:

> Thanks, John.
>
> But my point is how to keep the leading zero in 0777,
> in order to be used in os.chmod('myfile', 0777)?

os.chmod('myfile', 0777)

Python will recognise integers written in octal if you leave a
leading zero, and in hex if you use a leading 0x or 0X.

>>> 010

8
>>> 0x10

16
>>> 010 + 0x10

24

As John pointed out, you don't have to use octal for chmod. You can use
decimal, or hex -- anything that is an integer.

--
Steven.

Steven D'Aprano, Jul 31, 2005