我想从我的 python 代码所在的目录中删除几个具有相似名称的文件。从终端手动执行此操作非常简单:
rm file.*
但是我知道通配符不能在 pexpect 中使用。由于只有四个文件,我只是要生成一个子文件,并从该子文件中删除所需的文件:
child = pexpect('rm file.1')
child.sendline('rm file.2')
child.sendline('rm file.3')
child.sendline('rm file.4')
这里的问题是子进程在生成并删除第一个文件后自行终止。我认为这是因为终端在删除文件后返回一个新行。
所以我的解决方法是生成 4 个子级来删除文件。像这样:
child1 = pexpect('rm file.1')
child2 = pexpect('rm file.2')
child3 = pexpect('rm file.3')
child4 = pexpect('rm file.4')
有更好的方法吗?就像更优雅并且只使用一个子流程一样?也许我可以带着某种期望让孩子活下去,或者以列表的形式一次性提交所有的论点?
警告: 测试代码可能会破坏您的数据!可能是你没理解清楚,或者是我理解错了。小心!
这应该可以做到:
import glob
import os
for filepath in glob.glob('file.*'):
os.remove(filepath)
使用
os.remove()
比调用子流程要好得多。
这个确切的代码要求您在
file.*
文件所在的目录中运行它。它很容易修改。
您可以使用单个命令删除所有文件
child = pexpect.spawn('/bin/bash -c "rm file.*"')