在python中执行ls输出魔术

xeo*_*eor 3 python linux bash shell

我希望在bash或python脚本中创建与ls创建的输出相同的输出.我不是指列出目录,但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
Run Code Online (Sandbox Code Playgroud)

怎么可以这样,并在调用它时仍然显示一行?

使用选项卡不起作用.换行符只是强制它是多行.\ 000不起作用.

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

echo -e "a\000b\000c\000d" | head -n 1
abcd
Run Code Online (Sandbox Code Playgroud)

猫-A不给我太多信息......

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

# cat -A <(echo -e "a\nb\nc\nd")
a$
b$
c$
d$
Run Code Online (Sandbox Code Playgroud)

那么..如何在我的脚本中生成相同类型的输出?我在这里缺少任何控制角色吗?

unw*_*ind 8

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

在Unix中,您应该能够使用Python的os.isatty()函数来获取此信息.

从shell中,您可以使用该tty(1)程序:tty -s <&1.如果stdout是tty,则返回true,否则返回false.tty实际上检查stdin,但<&1你可以将stdout重定向到stdin以有效地检查stdout.