【发布时间】:2023-04-04 05:14:01
【问题描述】:
每当我的 IP 地址发生变化时,我都需要更新一个文本文件,然后从 shell 运行一些命令。
-
创建变量 LASTKNOWN = "212.171.135.53"
这是我们编写此脚本时的 IP 地址。 -
获取当前 IP 地址。每天都会变化。
-
为新 IP 创建变量 CURRENT。
-
比较(作为字符串)CURRENT 和 LASTKNOWN
-
如果相同,则退出()
-
如果它们不同,
A.将包含 LASTKNOWN IP 地址的旧配置文件(/etc/ipf.conf)“复制”到 /tmp
B. 将 /tmp/ipf.conf 文件中的 LASTKNOWN 替换为 CURRENT。
C. 使用子进程“mv /tmp/ipf.conf /etc/ipf.conf”
D. 使用子进程执行,“ipf -Fa -f /etc/ipf.conf”
E. 使用子进程执行,“ipnat -CF -f /etc/ipnat.conf” -
退出()
我知道如何执行第 1 步到第 6 步。我陷入了“文件编辑”部分,A -> C。我不知道要使用哪个模块或是否应该在适当的位置编辑文件。有很多方法可以做到这一点,我无法决定最好的方法。我想我想要最保守的。
我知道如何使用子流程,因此您无需对此发表评论。
我不想替换整行;只是一个特定的虚线四边形。
谢谢!
【问题讨论】:
-
“有很多方法可以做到这一点,我无法决定最好的方法。”由于您正在寻找一种最佳方式,而不仅仅是任何方式,也许最好多说一点约束:答案是否必须非常有效(内存或运行时间)等?
-
不,它不需要超级高效。我正在编辑的文件很小。但也许将来我需要对一个 20MB 的 15,000 行的文本文件执行这种类型的操作。我猜你可以告诉我一个更有效的方法。
-
mv
命令(及其 python 等价物shutil.move()
)不能保证是原子的。最好将新版本放在同一个目录下(最简单的放在同一个逻辑驱动器上的方法),然后使用os.rename()
调用进行原子重命名。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用 Python 编辑文本文件 - Python技术站