python3.7 子进程无法为我删除文件
python3.7 subprocess failed to delete files for me
我有一个 python 脚本使用 'subprocess' 运行ning linux 命令来确认我的任务是在做正确的事情,并且运行良好。但我发现在 运行 执行我的任务时它会同时生成一些日志文件。所以我在一开始就为我的 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. 这是清理日志文件的正确方法吗?我想不出更好的方法来自动完成。谢谢!
Why did not it work?
因为您提供给命令的参数是在引号中传递的,而像 *
这样的通配符在引号中不起作用。当前执行的命令 看起来像 这个:
$ rm "-rf" "filename.*"
在您的终端中试试这个,您会发现它不会删除以 filename.
.
开头的文件
您需要传递 shell = True
才能在 shell 解释器中执行命令,并将您的命令作为单个字符串给出。
subprocess.run(f'rm -rf {regex}', shell=True)
我有一个 python 脚本使用 'subprocess' 运行ning linux 命令来确认我的任务是在做正确的事情,并且运行良好。但我发现在 运行 执行我的任务时它会同时生成一些日志文件。所以我在一开始就为我的 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. 这是清理日志文件的正确方法吗?我想不出更好的方法来自动完成。谢谢!
Why did not it work?
因为您提供给命令的参数是在引号中传递的,而像 *
这样的通配符在引号中不起作用。当前执行的命令 看起来像 这个:
$ rm "-rf" "filename.*"
在您的终端中试试这个,您会发现它不会删除以 filename.
.
您需要传递 shell = True
才能在 shell 解释器中执行命令,并将您的命令作为单个字符串给出。
subprocess.run(f'rm -rf {regex}', shell=True)