(我的代码)
#!/usr/bin/python3
import fileinput
for line in fileinput.input("/etc/ssh/sshd_config", inplace=True), :
print (line.replace("#PermitRootLogin", "PermitRootLogin no"))
(错误)
追踪(最近一次通话): 文件“./assignment4-part1.py”,第6行,in print(line.replace(“#PermitRootLogin”,“PermitRootLogin = no”)) AttributeError:'FileInput'对象没有属性'replace'
(注)
我尝试了不同的方法,从查找和替换行的其他帖子中看到,但遇到类似的问题/错误。任何指导都将非常感谢。我使用的是CentOS,安装/更新了python3。
答案 0 :(得分:0)
您的代码中存在语法错误。您的for
循环表达式有一个错误的逗号:
for line in fileinput.input("/etc/ssh/sshd_config", inplace=True), :
这意味着您实际上正在迭代包含fileinput.FileInput
对象的单元素元组,而不是迭代对象本身。
删除逗号:
for line in fileinput.input("sshd_config", inplace=True):
另外两个简短的建议:
请勿在循环中使用print
,因为print
会附加换行符,因此您最终会将整个文件双倍间距。请考虑一下:
for line in fileinput.input("sshd_config", inplace=True):
sys.stdout.write(line.replace("#PermitRootLogin", "PermitRootLogin no"))
最后,考虑输入文件包含以下内容会发生什么:
#PermitRootLogin no
您的代码会将其重写为:
PermitRootLogin no no
哪个无效。
答案 1 :(得分:0)
如果是Python文件,请将import sys
添加到顶部。并获得Python的初学者指南:>
或者考虑使用GNU sed regex并完全避免使用Python