`subprocess.call(['rm','-r','!(new_models|creat_model.py|my_mos.tit)'])`
删除删除所有的文件和目录,除了一些人,但它给回信息
RM:无法删除`!(new_models | creat_model.py | my_mos.tit)':没有这样的文件或目录
我该如何解决这个问题?由于
`subprocess.call(['rm','-r','!(new_models|creat_model.py|my_mos.tit)'])`
删除删除所有的文件和目录,除了一些人,但它给回信息
RM:无法删除`!(new_models | creat_model.py | my_mos.tit)':没有这样的文件或目录
我该如何解决这个问题?由于
如果您使用的命令行上rm
命令!(…|…|…)
模式是由外壳调用rm
之前扩展到所有文件名,除了那些在模式。您的代码直接调用rm
,因此rm
将shell模式作为文件名获取,并尝试使用即名称删除文件。
您必须将shell=True
添加到subprocess.call()
的参数列表中,或者实际使用Python进行编码而不是调用外部命令。下行:这将超过一条线。上行:可以独立于外部外壳和系统外部程序完成。
到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)
这个工程!谢谢 –
你有一个文件或一个名为'(new_models | creat_model.py | my_mos.tit)目录'!? – wap26
in bash我认为这意味着我不想删除的文件 –
你是对的,但是用你的python行,你不会运行'bash'来解释这个语法;你直接创建一个运行'rm'程序的进程。 – wap26