python - 在 python 中执行 ls 输出魔术

标签 python linux bash shell

我想得到与 ls 在 bash 或 python 脚本中创建的相同的输出。 我不是说列出目录,而是 ls 所做的事情是能够“循环”。示例:

# ls
a b c d

# ls | head -n 1
a

# for i in $(ls); do echo "file: $i"; done
file: a
file: b
file: c
file: d

ls怎么可以这样,调用的时候还是一行显示所有内容?

使用制表符不起作用.. 换行只是强制它是多行。\000 不起作用。

# echo -e "a\tb\tc\td" | head -n 1
a    b    c    d

echo -e "a\000b\000c\000d" | head -n 1
abcd

cat -A 没有给我太多信息...

# cat -A <(ls --color=no)
a$
b$
c$
d$

# cat -A <(echo -e "a\nb\nc\nd")
a$
b$
c$
d$

所以.. 我怎样才能在我的脚本中生成相同类型的输出?我在这里缺少任何控制字符吗?

最佳答案

诀窍是检测输出是否为终端,在这种情况下 ls使用或不使用列,在这种情况下它以更简单的格式输出。

在 Unix 中,您应该能够使用 Python 的 <a href="http://docs.python.org/library/os.html#os.isatty" rel="noreferrer noopener nofollow">os.isatty()</a>获取此信息的函数。

在 shell 中,您可以使用 <a href="http://linux.die.net/man/1/tty" rel="noreferrer noopener nofollow">tty(1)</a>程序:tty -s <&1 .如果 stdout 是 tty,这将退出 true,否则将退出 false。 tty实际上检查标准输入,但是使用 <&1您可以将 stdout 重定向到 stdin 以有效地检查 stdout。

关于python - 在 python 中执行 ls 输出魔术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783971/

相关文章:

bash:一次从字符串中读取一个字符的文本,带空格

python - 如何从 python 中传输许多 bash 命令?

python - 简洁的书写方式(a + b == c 或 a + c == b 或 b + c == a)

python - 如何在 Python 中使用 Google api 检索 picasa 照片

python - Flask 多个 URL 处理程序部分处理 URL

php - log4php 无法在 linux 环境下创建文件

python - 用于后续在 python 中运行的缓存工具

linux - 在 GNU screen 硬状态中显示 Windows 用户

linux - Jenkins 无法完成执行 "while true"循环的构建脚本

bash 语法错误 : invalid arithmetic operator with token "@mail.com"