I need to update a text file whenever my IP address changes, and then run a few commands from the shell afterwards.
Create variable LASTKNOWN = "212.171.135.53" This is the ip address we have while writing this script.
Get the current IP address. It will change on a daily basis.
Create variable CURRENT for the new IP.
Compare (as strings) CURRENT to LASTKNOWN
If they are the same, exit()
If they differ,
A. "Copy" the old config file (/etc/ipf.conf) containing LASTKNOWN IP address into /tmp
B. Replace LASTKNOWN with CURRENT in the /tmp/ipf.conf file.
C. Using subprocess "mv /tmp/ipf.conf /etc/ipf.conf"
D. Using subprocess execute, "ipf -Fa -f /etc/ipf.conf"
E. Using subprocess execute, "ipnat -CF -f /etc/ipnat.conf"
exit()
I know how to do steps 1 through 6. I fall down on the "file editing" part, A -> C. I can't tell what module to use or whether I should be editing the file in place. There are so many ways to do this, I can't decide on the best approach. I guess I want the most conservative one.
I know how to use subprocess, so you don't need to comment on that.
I don't want to replace entire lines; just a specific dotted quad.
Thanks!
fileinput module has very ugly API, I find beautiful module for this task - in_place, example for Python 3:
import in_place
with in_place.InPlace('data.txt') as file:
for line in file:
line = line.replace('test', 'testZ')
file.write(line)
main difference from fileinput:
for example - fileinput can line by line editing only, in_pace allow read whole file to memory (if it not big) and modify it.