我每天都有python代码来备份mongodb,但出现属性错误。错误详细信息如下。
回溯(最近通话最近): 文件“ C:\ Users \ sanja \ Desktop \ Mongo backup.py”,第76行,在 备用(参数) 备份中的文件“ C:\ Users \ sanja \ Desktop \ Mongo backup.py”,第25行 网址= args.url AttributeError:“名称空间”对象没有属性“ URL”
import os
import argparse
import logging
import datetime
import urlparse
import subprocess
logging.basicConfig(level=logging.INFO)
parser = argparse.ArgumentParser(description='Backup Mongolab DBs')
parser.add_argument('-u', '--url mongodb://192.168.32.11:27017/test',
type=str,
required=False,
default=None,
help='Mongo DB URL for Backups')
parser.add_argument('-o', '--output_dir F:\\DB_backup',
type=str,
required=False,
default='./',
help='Output directory for the backup.')
def backup(args):
today = datetime.datetime.now()
url = args.url
if url is None:
logging.info('Fetching MONGOLAB_URI using heroku config:get')
url = subprocess.check_output([
'heroku',
'config:get',
'MONGOLAB_URI'
]).strip()
url = urlparse.urlparse(url)
assert url.scheme == 'mongodb', 'mongodb://192.168.32.11:27017/test'
# netloc = url.netloc
# username = url.username
# password = url.password
hostname = url.hostname
port = url.port
db = url.path[1:]
output_dir = os.path.abspath(os.path.join(
os.path.curdir,
args.output_dir))
assert os.path.isdir(output_dir), 'Directory %s can\'t be found.' %
output_dir
output_dir = os.path.abspath(os.path.join(output_dir,
'%s__%s'% ( db, today.strftime('%Y_%m_%d_%H%M%S'))
))
logging.info('Backing up %s from %s to %s' % (db, hostname, output_dir))
backup_output = subprocess.check_output(
[
'mongodump',
'-host 192.168.32.11', '%s' % hostname,
# '-u', '%s' % username,
# '-p', '%s' % password,
'-d test', '%s' % db,
'--port 27017', '%s' % port,
'-o F:\\DB_backup', '%s' % output_dir
])
logging.info(backup_output)
if __name__ == '__main__':
args = parser.parse_args()
try:
backup(args)
except AssertionError, msg:
logging.error(msg)
答案 0 :(得分:0)
使用argparse
时出现错误
AttributeError: 'Namespace' object has no attribute 'property'
表示property
参数中未定义args
。在这种情况下,您希望定义一个名称为url
的参数,但是请查看您的代码:
parser.add_argument('-u', '--url mongodb://192.168.32.11:27017/test', ...
您创建了一个名为'--url mongodb://192.168.32.11:27017/test'
的属性。您的声明应为:
parser.add_argument('-u', '--url', ...
您不能在声明中添加值;也许您是想定义一个默认值?
parser.add_argument('-u', '--url',
type=str,
required=False,
default='mongodb://192.168.32.11:27017/test',
help='Mongo DB URL for Backups')
定义的其他参数也是如此。