【发布时间】:2016-06-01 16:34:47
【问题描述】:
我想在 Python 中执行以下命令并将其存储在变量中:
ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1
但我无法让它工作。我尝试使用子进程('call'和'check_output'以及'os.system'都没有工作。它总是给我一个错误或错误的输入,而当我在shell中执行这个命令时它可以正常工作。
【问题讨论】:
-
顺便说一句,这通常是非常糟糕的形式,即使在本机 shell 中也是如此——正如 mywiki.wooledge.org/ParsingLs 中所讨论的那样——在 Python 中更是如此,在 Python 中有用于迭代目录树的本机工具。并非所有可能的文件名都可以在换行符分隔的流中表示,因此必然存在
ls会错误表示的名称。 -
如果你想调用一堆shell命令,shell脚本会比Python程序更合适。如果你想写 Python,你应该使用像
os.listdir这样的工具和 Python 自己的字符串匹配工具。 -
查尔斯·达菲说的。另请参阅 Unix 和 Linux 上Why not parse
ls? 的答案。 -
谢谢你们,我一定会记住的。
-
如果您担心脚本的可移植性,您应该绝对避免解析
ls的输出!ls在野外有很多变体,即使在一台机器上,它的输出也会根据各种环境变量的设置而改变。