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



我有一个使用运行linux命令的'subprocess'的python脚本来确认我的任务正在做正确的事情,并且效果很好。但是我发现同时它会在运行我的任务时生成一些日志文件。所以我一开始就为我添加了 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.为什么它不起作用?在我的第二个测试用例中,我正在使用"子进程"来运行 linux 命令,它工作正常。
2. 这是清理日志文件的正确方法吗? 我想不出更好的方法来自动执行此操作。谢谢!

为什么它不起作用?

因为您提供给命令的参数是在引号和通配符中传递的,例如*在引号中不起作用。当前执行的命令如下所示

$ rm "-rf" "filename.*"

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

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

subprocess.run(f'rm -rf {regex}', shell=True)

最新更新