2014-07-10 28 views
0

我想用subprocess.call()来删除文件

`subprocess.call(['rm','-r','!(new_models|creat_model.py|my_mos.tit)'])` 

删除删除所有的文件和目录,除了一些人,但它给回信息

RM:无法删除`!(new_models | creat_model.py | my_mos.tit)':没有这样的文件或目录

我该如何解决这个问题?由于

+1

你有一个文件或一个名为'(new_models | creat_model.py | my_mos.tit)目录'!? – wap26

+0

in bash我认为这意味着我不想删除的文件 –

+2

你是对的,但是用你的python行,你不会运行'bash'来解释这个语法;你直接创建一个运行'rm'程序的进程。 – wap26

回答

4

如果您使用的命令行上rm命令!(…|…|…)模式是由外壳调用rm之前扩展到所有文件名,除了那些在模式。您的代码直接调用rm,因此rm将shell模式作为文件名获取,并尝试使用名称删除文件。

您必须将shell=True添加到subprocess.call()的参数列表中,或者实际使用Python进行编码而不是调用外部命令。下行:这将超过一条线。上行:可以独立于外部外壳和系统外部程序完成。

0

shell=True另一种可能是glob和手动过滤用法:

import glob 
files = [i for i in glob.glob("*") if i not in ('new_models', 'creat_model.py', 'my_mos.tit')] 
subprocess.call(['rm','-r'] + files) 
+0

这个工程!谢谢 –