2012-03-28 89 views
1

我正在尝试从python到ls -l,以检查文件的最后修改日期。Python长列表目录(ls -l),ls *

os.listdir不显示长列表格式。 subprocess.call显示的格式,但实际上打印它,并返回0.我希望能够把它放在一个变量。有任何想法吗 ?

而且,我试图

subprocess.call("ls","*.py") 

,回答

ls: cannot access *.py: No such file or directory 

它与shell=True,但如果有人可以解释为什么它不无它的工作,我会感激。如果你知道如何使它工作,甚至更好。

+7

为什么在这个世界上你会掏腰包而不是仅仅使用'os.path.getmtime()'? – kindall 2012-03-28 22:29:59

回答

2

它不无shell=True工作,因为*是一个shell扩展字符 - 从*.py要在.py结尾的文件的列表是由外壳本身,而不是lspython执行的功能。

如果要获取通过subprocess调用的命令的输出,应该使用subprocess.check_output()subprocess.Popen

ls_output = subprocess.check_output(['ls', '-l']) 
+3

当然,更好的方法是根本不调用'ls',而是使用'os.listdir()'和'os.stat()'(或'os.path'中的效用函数' glob'模块。) – 2012-03-28 23:19:36

+1

我同意。但是因为这个问题具体是关于子进程的,所以我想我至少应该回答那个问题的其他人。 – Amber 2012-03-28 23:22:42

+0

当然,但是对于OP和任何试图做同样事情的人来说,推荐实际的正确做事方式会更有帮助。 – 2012-03-28 23:26:22