已經編寫了下面的腳本來刪除文件夾中與「keep」期間中的日期不匹配的文件。例如。刪除部分與此名稱匹配的文件。Python子流程腳本失敗
該命令在shell中起作用,但在子流程調用時失敗。
/bin/rm /home/backups/!(*"20170920"*|*"20170919"*|*"20170918"*|*"20170917"*|*"20170916"*|*"20170915"*|*"20170914"*)
#!/usr/bin/env python
from datetime import datetime
from datetime import timedelta
import subprocess
### Editable Variables
keepdays=7
location="/home/backups"
count=0
date_string=''
for count in range(0,keepdays):
if(date_string!=""):
date_string+="|"
keepdate = (datetime.now() - timedelta(days=count)).strftime("%Y%m%d")
date_string+="*\""+keepdate+"\"*"
full_cmd="/bin/rm "+location+"/!("+date_string+")"
subprocess.call([full_cmd], shell=True)
這是腳本返回什麼:
#./test.py
/bin/rm /home/backups/!(*"20170920"*|*"20170919"*|*"20170918"*|*"20170917"*|*"20170916"*|*"20170915"*|*"20170914"*)
/bin/sh: 1: Syntax error: "(" unexpected
Python版本是Python的2.7.12
當您從shell/terminal運行命令時,您正在使用bash的globs擴展和其他替換。但是,Python依靠'/ bin/sh'(而不是'/ bin/bash')來運行代碼。 – hjpotter92