python3.7子进程无法为我删除文件

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

我有一个python脚本使用运行Linux命令的'subprocess'来确认我的任务做的正确,并且运行良好。但是我发现同时运行任务时它会生成一些日志文件。因此,我一开始为我的rm日志文件添加了清理功能。我的脚本是:

def test_clean_up_logs(path_to_my_log):
    regex = path_to_my_log + ".*"   # i need this because log will append current date time when it's generated
    print(regex) # i can see it's correct
    result = subprocess.run(['rm', '-rf', regex])


def test_my_real_test():
      # This will run my real test and generate log files

但是事实证明,在我添加了第一个测试后,它并没有为我删除日志文件,它在我的构建目录中仍然有越来越多的日志文件。我使用以下命令运行它:

Python3.7 -m pytest /path/to/mydir

我的问题是:1.为什么不起作用?在第二个测试用例中,我正在使用“ subprocess”运行linux命令,并且工作正常。2.这是清理日志文件的正确方法吗?我想不出一种更好的自动方法。谢谢!

python linux shell subprocess pytest
1个回答
0
投票

为什么不起作用?

因为您给命令提供的参数用引号引起来,而像*这样的通配符不能用引号引起来。当前执行的命令外观 this:

$ rm "-rf" "filename.*"

在终端中尝试此操作,您将看到它不会删除以filename.开头的文件。

您需要传递shell = True以在Shell解释器中执行命令,并将命令作为单个字符串提供。

subprocess.run(f'rm -rf {regex}', shell=True)
© www.soinside.com 2019 - 2024. All rights reserved.