通过python

时间:2016-10-10 04:09:30

标签: python python-3.x

  1. 查找以“#PermitRootLogin yes”开头的行,并替换为“PermitRootLogin no”
  2. 在底部附加一行说“AllowUsers user1@test.com”
  3. 重新启动sshd守护程序
  4. (我的代码)

    #!/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。

2 个答案:

答案 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