使用 pexpect 从 Linux 终端的目录中删除多个文件

问题描述 投票:0回答:2

我想从我的 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')

有更好的方法吗?就像更优雅并且只使用一个子流程一样?也许我可以带着某种期望让孩子活下去,或者以列表的形式一次性提交所有的论点?

python linux pexpect
2个回答
1
投票

警告: 测试代码可能会破坏您的数据!可能是你没理解清楚,或者是我理解错了。小心!


这应该可以做到:

import glob
import os

for filepath in glob.glob('file.*'):
    os.remove(filepath)

使用

os.remove()
比调用子流程要好得多。

这个确切的代码要求您在

file.*
文件所在的目录中运行它。它很容易修改。


0
投票

您可以使用单个命令删除所有文件

 child = pexpect.spawn('/bin/bash -c "rm file.*"')
© www.soinside.com 2019 - 2024. All rights reserved.