python - python3.7子进程无法为我删除文件
问题描述
我有一个使用“子进程”运行 linux 命令的 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)
推荐阅读
- javascript - d3.js 水平条形图问题
- yahoo-api - 现在雅虎从城市名称获取 WOEID!API 已关闭
- javascript - 如何每 1 分钟刷新部分页面?
- git - 使用 Visual Studio 在 GIT 中跟踪文件的更改
- android - When using Text Input When Keyboard is not on screen the background image is fine but when keyboard is on screen image bottom comes above the keyboard
- c# - 如何使用 UpdatePanel 刷新 ASP 中的值
- android - 如何在viewpager中设置几个具有相同结构的片段?
- c - gcc - 警告:函数“get_int”的隐式声明
- scala - 未找到:程序集中的值 assemblyJarName assemblyJarName := s"${name.value.replace(' ','-')}-${version.value}.jar"
- laravel - lararvel uuid 作为主键