如何使用subprocess.check_输出“以任何abc文件名()列出”

2024-10-01 19:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个同名的文件,我想得到最新的文件

[根@xxxtmp]#ls-t1 abclog*

1957年 abclog.1830年 abclog.1799年 abclog.1742年

我可以通过执行下面的命令来完成。在

[根@xxxtmp]#ls-t1 abclog*|头部-n 1

1957年

但是,当我试图在python中执行相同的操作时,出现错误:

subprocess.check_output("ls -t1 abclog* | head -n 1",shell=True) ls: cannot access abclog*: No such file or directory ''

似乎无法将“*”识别为特殊参数。我怎样才能达到同样的效果?在


Tags: 文件命令trueoutputcheck错误shellls
2条回答

正如其他人所指出的,您的代码应该可以工作。它不起作用可能是因为当前目录不是您所设想的目录,所以abc*是由shell扩展的而不是(即使设置了shell=True),并按原样传递给ls,从而导致“没有这样的文件”错误。在

调用check_output时,必须传递绝对路径或使用cwd=参数。另一个不错的python替代方法是避免subprocess,只使用python代码返回最近修改过的文件:

most_recent = max(glob.glob(os.path.join("path/to/file","abclog*"),key=os.path.getmtime)

(使用maxos.path.getmtime作为键,glob.glob过滤文件)

请确保在文件所在的目录中执行此操作。如果您只是启动Idle来运行此代码,那么您将而不是位于该目录中。在

相关问题 更多 >

    热门问题