【问题标题】:New line character appended to os.popen().read() command新行字符附加到 os.popen().read() 命令
【发布时间】:2021-12-26 16:29:39
【问题描述】:

我正在通过以下命令检索文件:

fileName = os.popen('ls -t testfile.txt |head -n1').read()

在打印 fileName 时,我看到附加了 \n

我知道我们可以通过替换命令删除\n,但我想知道为什么会这样。

【问题讨论】:

  • 我会删除 \n.strip() 以摆脱 all 尾随/前导空格,因为您可能不想要它。当然,同样的原则:)

标签: python popen


【解决方案1】:

ls 命令在输出中附加一个换行符,你可以通过 popen打开终端并执行你想要运行的命令>

【讨论】:

  • 感谢您的洞察力。有没有办法限制这个附加?
  • 对我来说最简单的方法是在 python 中执行此操作,而不是从标准输出中截断“\n”。收集数据后,不要使用替换,而是使用范围索引(我不知道这个术语是否正确,我给你举个例子)。假设 data = "这些是数据\n" data[:-1] 意味着从第一个字符抓取数据到最后一个被排除的字符,所以在这种情况下 data[:-1] = "这些是数据"
【解决方案2】:

一种方法可以做到。

您可以将tr 命令通过管道传递给ls,例如:

ls -A | tr '\n' ' ' | less

只需将命令用作:

ls | tr '\n' ' ' | head n-1

所以在你的 Python 代码中你可以

fileName = os.popen("ls -t testfile.txt | tr '\n' ' ' | head n-1").read()[:-1]

这会将换行符替换为空格字符,然后将其从字符串中排除。

【讨论】:

  • 不工作。添加“tr”时出现错误,“tr: when truncating set1, string2 must not be empty” 更正后,head n-1(或)head -n1 不过滤最新文件。最后使用不带“tr”,读取值后使用replace函数。
  • 当然,tr 的第二个参数必须是非空字符串,这就是我使用空格字符的原因。因此,您可以:fileName = os.popen("ls -t testfile.txt | tr '\n' ' ' | head n-1").read()[:-1]
  • 感谢@shannarra
  • 不客气,@Jagan!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2010-11-29
相关资源
最近更新 更多