我有几个同名文件,我想获取最新文件
[root @ xxx tmp] #ls -t1 abclog *
abclog.1957 abclog.1830 abclog.1799 abclog.1742
我可以通过执行以下命令来实现这一点。
[root @ xxx tmp] #ls -t1 abclog * |头-n 1
abclog.1957
但是当我试图在python中执行相同的操作时,得到错误:
subprocess.check_output(“ls -t1 abclog * | head -n 1”,shell = True) ls:无法访问abclog *:没有这样的文件或目录 ''
似乎它无法将'*'识别为特殊参数。我怎样才能实现同样的目标?
答案 0 :(得分:0)
确保在文件所在的目录中执行此操作。如果您只是启动Idle来运行此代码,那么不将在该目录中。
答案 1 :(得分:0)
正如其他人所说,您的代码应该可行。它不起作用可能是因为当前目录不是你想象的目录,所以abc*
不由shell扩展(即使{{1} }设置),并按原样传递给shell=True
,产生一个"没有这样的文件"错误。
调用ls
时,您必须传递绝对路径或使用cwd=
参数。另一个不错的pythonic替代方法是避免check_output
,并仅使用python代码返回最近修改的文件:
subprocess
(使用most_recent = max(glob.glob(os.path.join("path/to/file","abclog*"),key=os.path.getmtime)
作为关键字max
和os.path.getmtime
来过滤文件)