IOError: 13, 'Permission denied' when writing to /etc/hosts via Python

后端 未结 2 884
感动是毒
感动是毒 2021-01-03 07:54

I have a Python app that I\'m working on that needs to access the hosts file to append a few lines. Everything worked on my test file, but when I told the program to actuall

2条回答
  •  醉话见心
    2021-01-03 08:17

    The easiest way to handle this is to write out your changes to a temp file, then run a program to overwrite the protected file. Like so:

    with open('/etc/hosts', 'rt') as f:
        s = f.read() + '\n' + '127.0.0.1\t\t\thome_sweet_home\n'
        with open('/tmp/etc_hosts.tmp', 'wt') as outf:
            outf.write(s)
    
    os.system('sudo mv /tmp/etc_hosts.tmp /etc/hosts')
    

    When your Python program runs sudo, the sudo program will prompt the user for his/her password. If you want this to be GUI based you can run a GUI sudo, such as "gksu".

    On Windows, the hosts file is buried a couple subdirectories under \Windows. You can use the same general trick, but Windows doesn't have the sudo command. Here is a discussion of equivalents:

    https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows

提交回复
热议问题