【问题标题】:\n not working in the output\n 在输出中不起作用
【发布时间】:2018-03-09 13:48:12
【问题描述】:

您好,我目前有以下输出:

'root:$6$aYGtvxKp/bl6Fv2y$sdZ3FbdJYQlP8VcfFZT.Y67We5EQmqcHW4I9Gl/3pXp8v4.nu9qMIEkmOcdRuD0lBTvEtnMHosEo7OEaYgG4E0::0:99999:7::::\nbin::17110::17110: /em>:17110:0:99999:7:::\nadm::17110:0:99999:7:::\nlp::17110:0:99999:7:::\ nsync::17110:0:99999:7:::\nshutdown::17110:0:99999:7:::\nhalt::17110:0:99999:7:: :\n邮件::17110:0:99999:7:::\noperator::17110:0:99999:7:::\ngames::17110:0:99999: 7:::\nftp::17110:0:99999:7:::\nnobody::17110:0:99999:7:::\nsystemd-bus-proxy:!!:17572 ::::::\nsystemd-network:!!:17572::::::\ndbus:!!:17572::::::\npolkitd:!!:17572::::::\ntss: !!:17572::::::\nsshd:!!:17572::::::\npostfix:!!:17572::::::\nchrony:!!:17572::::::\时髦的:$1$EgZiG263$4W/wMljYzhOqnupg9cJ7W/:17599:0:99999:7:::\n'

来自我的代码:

command = "cat /etc/shadow "
process = os.popen(command)
results = str(process.read())

我试图让它看起来像命令提示符中的那个,它是表格形式,但是由于某种原因,当我将它传输到 python 时,它确实执行新行函数“\n”不起作用。我的代码有什么问题?

【问题讨论】:

  • 您是否使用print(results) 或其他方式?也许你想发一个minimal reproducible example
  • 您似乎正在查看字符串的repr(),其中换行符将显示为转义序列,不可打印的字符也将显示。

标签: python newline spacing


【解决方案1】:

您可能应该直接阅读文件:

filename = '/etc/shadow'
with open(filename) as shadowfile:
    content = shadowfile.read()
    # or possibly lines = shadowfile.readlines()

您是尝试打印输出还是只是在解释器中看到了结果变量的内容?在后一种情况下,换行符将显示为 \p,而 print(results) 将产生您期望的结果。

【讨论】:

    【解决方案2】:
    l = 'root:$6$aYGtvxKp/bl6Fv2y$sdZ3FbdJYQlP8VcfFZT.Y67We5EQmqcHW4I9Gl/3pXp8v4.nu9qMIEkmOcdRuD0lBTvEtnMHosEo7OEaYgG4E0::0:99999:7:::\nbin::17110:0:99999:7:::\ndaemon::17110:0:99999:7:::\nadm::17110:0:99999:7:::\nlp::17110:0:99999:7:::\nsync::17110:0:99999:7:::\nshutdown::17110:0:99999:7:::\nhalt::17110:0:99999:7:::\nmail::17110:0:99999:7:::\noperator::17110:0:99999:7:::\ngames::17110:0:99999:7:::\nftp::17110:0:99999:7:::\nnobody::17110:0:99999:7:::\nsystemd-bus-proxy:!!:17572::::::\nsystemd-network:!!:17572::::::\ndbus:!!:17572::::::\npolkitd:!!:17572::::::\ntss:!!:17572::::::\nsshd:!!:17572::::::\npostfix:!!:17572::::::\nchrony:!!:17572::::::\funky:$1$EgZiG263$4W/wMljYzhOqnupg9cJ7W/:17599:0:99999:7:::\n'
    for i in l.split('\n'):
     print(i)
    

    输出:

    root:$6$aYGtvxKp/bl6Fv2y$sdZ3FbdJYQlP8VcfFZT.Y67We5EQmqcHW4I9Gl/3pXp8v4.nu9qMIEkmOcdRuD0lBTvEtnMHosEo7OEaYgG4E0::0:99999:7:::
    bin::17110:0:99999:7:::
    daemon::17110:0:99999:7:::
    adm::17110:0:99999:7:::
    lp::17110:0:99999:7:::
    sync::17110:0:99999:7:::
    shutdown::17110:0:99999:7:::
    halt::17110:0:99999:7:::
    mail::17110:0:99999:7:::
    operator::17110:0:99999:7:::
    games::17110:0:99999:7:::
    ftp::17110:0:99999:7:::
    nobody::17110:0:99999:7:::
    systemd-bus-proxy:!!:17572::::::
    systemd-network:!!:17572::::::
    dbus:!!:17572::::::
    polkitd:!!:17572::::::
    tss:!!:17572::::::
    sshd:!!:17572::::::
    postfix:!!:17572::::::
    chrony:!!:17572::::::    unky:$1$EgZiG263$4W/wMljYzhOqnupg9cJ7W/:17599:0:99999:7:::
    

    【讨论】:

    • 这太复杂了。 print(l) 将产生完全相同的结果(在尊重 Unix 换行符的系统上)。
    • 我同意@MartinSandChristensen。 print(l) 已经足够了。
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多