Use the normal sys.exit() instead of os._exit() because the latter will
not flush any output. Also catch the SysExit exceptions in gramps.py and do a gtk.main_quit() just to be sure. This all is to make commandline processing usable. svn: r8308
This commit is contained in:
@@ -114,7 +114,7 @@ class ArgHandler:
|
|||||||
"""
|
"""
|
||||||
Fill in lists with open, exports, imports, and actions options.
|
Fill in lists with open, exports, imports, and actions options.
|
||||||
|
|
||||||
Any parsing errors lead to abort via os._exit(1).
|
Any parsing errors lead to abort via sys.exit(1).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -123,7 +123,7 @@ class ArgHandler:
|
|||||||
except getopt.GetoptError:
|
except getopt.GetoptError:
|
||||||
# return without filling anything if we could not parse the args
|
# return without filling anything if we could not parse the args
|
||||||
print "Error parsing arguments: %s " % self.args[1:]
|
print "Error parsing arguments: %s " % self.args[1:]
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if leftargs:
|
if leftargs:
|
||||||
# if there were an argument without option,
|
# if there were an argument without option,
|
||||||
@@ -328,7 +328,7 @@ class ArgHandler:
|
|||||||
_('GRAMPS cannot open non-native data '
|
_('GRAMPS cannot open non-native data '
|
||||||
'without setting up new GRAMPS database.'))
|
'without setting up new GRAMPS database.'))
|
||||||
print "Cannot continue without native database. Exiting..."
|
print "Cannot continue without native database. Exiting..."
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif filetype == const.app_gramps_package:
|
elif filetype == const.app_gramps_package:
|
||||||
print "Type: GRAMPS package"
|
print "Type: GRAMPS package"
|
||||||
self.vm.import_pkg(filename)
|
self.vm.import_pkg(filename)
|
||||||
@@ -341,13 +341,13 @@ class ArgHandler:
|
|||||||
'Valid types are: GRAMPS database, GRAMPS XML, '
|
'Valid types are: GRAMPS database, GRAMPS XML, '
|
||||||
'GRAMPS package, and GEDCOM.') % filetype)
|
'GRAMPS package, and GEDCOM.') % filetype)
|
||||||
print "Exiting..."
|
print "Exiting..."
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
if success:
|
if success:
|
||||||
# Add the file to the recent items
|
# Add the file to the recent items
|
||||||
#RecentFiles.recent_files(filename,filetype)
|
#RecentFiles.recent_files(filename,filetype)
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.open:
|
if self.open:
|
||||||
@@ -373,7 +373,7 @@ class ArgHandler:
|
|||||||
else:
|
else:
|
||||||
print "Unknown file type: %s" % format
|
print "Unknown file type: %s" % format
|
||||||
print "Exiting..."
|
print "Exiting..."
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.vm.read_recent_file(filename,filetype)
|
self.vm.read_recent_file(filename,filetype)
|
||||||
@@ -382,7 +382,7 @@ class ArgHandler:
|
|||||||
except:
|
except:
|
||||||
print "Error opening the file."
|
print "Error opening the file."
|
||||||
print "Exiting..."
|
print "Exiting..."
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if self.imports:
|
if self.imports:
|
||||||
self.cl = bool(self.exports or self.actions or self.cl)
|
self.cl = bool(self.exports or self.actions or self.cl)
|
||||||
@@ -396,11 +396,11 @@ class ArgHandler:
|
|||||||
except:
|
except:
|
||||||
print "Could not create import directory %s. Exiting." \
|
print "Could not create import directory %s. Exiting." \
|
||||||
% self.impdir_path
|
% self.impdir_path
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif not os.access(self.impdir_path,os.W_OK):
|
elif not os.access(self.impdir_path,os.W_OK):
|
||||||
print "Import directory %s is not writable. Exiting." \
|
print "Import directory %s is not writable. Exiting." \
|
||||||
% self.impdir_path
|
% self.impdir_path
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
# and clean it up before use
|
# and clean it up before use
|
||||||
files = os.listdir(self.impdir_path) ;
|
files = os.listdir(self.impdir_path) ;
|
||||||
for fn in files:
|
for fn in files:
|
||||||
@@ -436,7 +436,7 @@ class ArgHandler:
|
|||||||
if self.imports:
|
if self.imports:
|
||||||
os.remove(self.imp_db_path)
|
os.remove(self.imp_db_path)
|
||||||
print "Exiting."
|
print "Exiting."
|
||||||
os._exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
elif Config.get(Config.RECENT_FILE) and Config.get(Config.AUTOLOAD):
|
elif Config.get(Config.RECENT_FILE) and Config.get(Config.AUTOLOAD):
|
||||||
rf = Config.get(Config.RECENT_FILE)
|
rf = Config.get(Config.RECENT_FILE)
|
||||||
@@ -452,7 +452,7 @@ class ArgHandler:
|
|||||||
def cl_import(self,filename,format):
|
def cl_import(self,filename,format):
|
||||||
"""
|
"""
|
||||||
Command-line import routine. Try to import filename using the format.
|
Command-line import routine. Try to import filename using the format.
|
||||||
Any errors will cause the os._exit(1) call.
|
Any errors will cause the sys.exit(1) call.
|
||||||
"""
|
"""
|
||||||
if format == 'grdb':
|
if format == 'grdb':
|
||||||
filename = os.path.normpath(os.path.abspath(filename))
|
filename = os.path.normpath(os.path.abspath(filename))
|
||||||
@@ -461,7 +461,7 @@ class ArgHandler:
|
|||||||
self.state.db,filename,empty)
|
self.state.db,filename,empty)
|
||||||
except:
|
except:
|
||||||
print "Error importing %s" % filename
|
print "Error importing %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gedcom':
|
elif format == 'gedcom':
|
||||||
filename = os.path.normpath(os.path.abspath(filename))
|
filename = os.path.normpath(os.path.abspath(filename))
|
||||||
try:
|
try:
|
||||||
@@ -470,14 +470,14 @@ class ArgHandler:
|
|||||||
import2(self.state.db,filename,None,None,False)
|
import2(self.state.db,filename,None,None,False)
|
||||||
except:
|
except:
|
||||||
print "Error importing %s" % filename
|
print "Error importing %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gramps-xml':
|
elif format == 'gramps-xml':
|
||||||
try:
|
try:
|
||||||
GrampsDbUtils.gramps_db_reader_factory(const.app_gramps_xml)(
|
GrampsDbUtils.gramps_db_reader_factory(const.app_gramps_xml)(
|
||||||
self.state.db,filename,None,self.cl)
|
self.state.db,filename,None,self.cl)
|
||||||
except:
|
except:
|
||||||
print "Error importing %s" % filename
|
print "Error importing %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'geneweb':
|
elif format == 'geneweb':
|
||||||
import ImportGeneWeb
|
import ImportGeneWeb
|
||||||
filename = os.path.normpath(os.path.abspath(filename))
|
filename = os.path.normpath(os.path.abspath(filename))
|
||||||
@@ -485,7 +485,7 @@ class ArgHandler:
|
|||||||
ImportGeneWeb.importData(self.state.db,filename,None)
|
ImportGeneWeb.importData(self.state.db,filename,None)
|
||||||
except:
|
except:
|
||||||
print "Error importing %s" % filename
|
print "Error importing %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gramps-pkg':
|
elif format == 'gramps-pkg':
|
||||||
# Create tempdir, if it does not exist, then check for writability
|
# Create tempdir, if it does not exist, then check for writability
|
||||||
tmpdir_path = os.path.join(const.home_dir,"tmp")
|
tmpdir_path = os.path.join(const.home_dir,"tmp")
|
||||||
@@ -495,10 +495,10 @@ class ArgHandler:
|
|||||||
except:
|
except:
|
||||||
print "Could not create temporary directory %s" \
|
print "Could not create temporary directory %s" \
|
||||||
% tmpdir_path
|
% tmpdir_path
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif not os.access(tmpdir_path,os.W_OK):
|
elif not os.access(tmpdir_path,os.W_OK):
|
||||||
print "Temporary directory %s is not writable" % tmpdir_path
|
print "Temporary directory %s is not writable" % tmpdir_path
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
else: # tempdir exists and writable -- clean it up if not empty
|
else: # tempdir exists and writable -- clean it up if not empty
|
||||||
files = os.listdir(tmpdir_path) ;
|
files = os.listdir(tmpdir_path) ;
|
||||||
for fn in files:
|
for fn in files:
|
||||||
@@ -512,13 +512,13 @@ class ArgHandler:
|
|||||||
archive.close()
|
archive.close()
|
||||||
except ReadError, msg:
|
except ReadError, msg:
|
||||||
print "Error reading archive:", msg
|
print "Error reading archive:", msg
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
except CompressError, msg:
|
except CompressError, msg:
|
||||||
print "Error uncompressing archive:", msg
|
print "Error uncompressing archive:", msg
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
except:
|
except:
|
||||||
print "Error extracting into %s" % tmpdir_path
|
print "Error extracting into %s" % tmpdir_path
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
dbname = os.path.join(tmpdir_path,const.xmlFile)
|
dbname = os.path.join(tmpdir_path,const.xmlFile)
|
||||||
|
|
||||||
@@ -527,7 +527,7 @@ class ArgHandler:
|
|||||||
self.state.db,dbname,None)
|
self.state.db,dbname,None)
|
||||||
except:
|
except:
|
||||||
print "Error importing %s" % filename
|
print "Error importing %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
# Clean up tempdir after ourselves
|
# Clean up tempdir after ourselves
|
||||||
# THIS HAS BEEN CHANGED, because now we want to keep images
|
# THIS HAS BEEN CHANGED, because now we want to keep images
|
||||||
# stay after the import is over. Just delete the XML file.
|
# stay after the import is over. Just delete the XML file.
|
||||||
@@ -538,7 +538,7 @@ class ArgHandler:
|
|||||||
## os.rmdir(tmpdir_path)
|
## os.rmdir(tmpdir_path)
|
||||||
else:
|
else:
|
||||||
print "Invalid format: %s" % format
|
print "Invalid format: %s" % format
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
if not self.cl:
|
if not self.cl:
|
||||||
return self.vm.post_load()
|
return self.vm.post_load()
|
||||||
|
|
||||||
@@ -551,7 +551,7 @@ class ArgHandler:
|
|||||||
"""
|
"""
|
||||||
Command-line export routine.
|
Command-line export routine.
|
||||||
Try to write into filename using the format.
|
Try to write into filename using the format.
|
||||||
Any errors will cause the os._exit(1) call.
|
Any errors will cause the sys.exit(1) call.
|
||||||
"""
|
"""
|
||||||
filename = os.path.abspath(os.path.expanduser(filename))
|
filename = os.path.abspath(os.path.expanduser(filename))
|
||||||
if format == 'grdb':
|
if format == 'grdb':
|
||||||
@@ -560,14 +560,14 @@ class ArgHandler:
|
|||||||
self.state.db,filename)
|
self.state.db,filename)
|
||||||
except:
|
except:
|
||||||
print "Error exporting %s" % filename
|
print "Error exporting %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gedcom':
|
elif format == 'gedcom':
|
||||||
try:
|
try:
|
||||||
gw = GrampsDbUtils.GedcomWriter(self.state.db,None,1,filename)
|
gw = GrampsDbUtils.GedcomWriter(self.state.db,None,1,filename)
|
||||||
ret = gw.export_data(filename)
|
ret = gw.export_data(filename)
|
||||||
except:
|
except:
|
||||||
print "Error exporting %s" % filename
|
print "Error exporting %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gramps-xml':
|
elif format == 'gramps-xml':
|
||||||
filename = os.path.normpath(os.path.abspath(filename))
|
filename = os.path.normpath(os.path.abspath(filename))
|
||||||
if filename:
|
if filename:
|
||||||
@@ -576,7 +576,7 @@ class ArgHandler:
|
|||||||
ret = g.write(filename)
|
ret = g.write(filename)
|
||||||
except:
|
except:
|
||||||
print "Error exporting %s" % filename
|
print "Error exporting %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'gramps-pkg':
|
elif format == 'gramps-pkg':
|
||||||
try:
|
try:
|
||||||
import WritePkg
|
import WritePkg
|
||||||
@@ -584,7 +584,7 @@ class ArgHandler:
|
|||||||
ret = writer.export()
|
ret = writer.export()
|
||||||
except:
|
except:
|
||||||
print "Error creating %s" % filename
|
print "Error creating %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'iso':
|
elif format == 'iso':
|
||||||
import WriteCD
|
import WriteCD
|
||||||
try:
|
try:
|
||||||
@@ -592,7 +592,7 @@ class ArgHandler:
|
|||||||
ret = writer.export()
|
ret = writer.export()
|
||||||
except:
|
except:
|
||||||
print "Error exporting %s" % filename
|
print "Error exporting %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'wft':
|
elif format == 'wft':
|
||||||
import WriteFtree
|
import WriteFtree
|
||||||
try:
|
try:
|
||||||
@@ -600,7 +600,7 @@ class ArgHandler:
|
|||||||
ret = writer.export_data()
|
ret = writer.export_data()
|
||||||
except:
|
except:
|
||||||
print "Error exporting %s" % filename
|
print "Error exporting %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
elif format == 'geneweb':
|
elif format == 'geneweb':
|
||||||
import WriteGeneWeb
|
import WriteGeneWeb
|
||||||
try:
|
try:
|
||||||
@@ -609,10 +609,10 @@ class ArgHandler:
|
|||||||
ret = writer.export_data()
|
ret = writer.export_data()
|
||||||
except:
|
except:
|
||||||
print "Error exporting %s" % filename
|
print "Error exporting %s" % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
print "Invalid format: %s" % format
|
print "Invalid format: %s" % format
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@@ -622,7 +622,7 @@ class ArgHandler:
|
|||||||
def cl_action(self,action,options_str):
|
def cl_action(self,action,options_str):
|
||||||
"""
|
"""
|
||||||
Command-line action routine. Try to perform specified action.
|
Command-line action routine. Try to perform specified action.
|
||||||
Any errors will cause the os._exit(1) call.
|
Any errors will cause the sys.exit(1) call.
|
||||||
"""
|
"""
|
||||||
if action == 'check':
|
if action == 'check':
|
||||||
import Check
|
import Check
|
||||||
@@ -648,7 +648,7 @@ class ArgHandler:
|
|||||||
name = options_str_dict.pop('name',None)
|
name = options_str_dict.pop('name',None)
|
||||||
if not name:
|
if not name:
|
||||||
print "Report name not given. Please use name=reportname"
|
print "Report name not given. Please use name=reportname"
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
for item in cl_list:
|
for item in cl_list:
|
||||||
if name == item[0]:
|
if name == item[0]:
|
||||||
@@ -678,7 +678,7 @@ class ArgHandler:
|
|||||||
name = options_str_dict.pop('name',None)
|
name = options_str_dict.pop('name',None)
|
||||||
if not name:
|
if not name:
|
||||||
print "Tool name not given. Please use name=toolname"
|
print "Tool name not given. Please use name=toolname"
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
for item in cli_tool_list:
|
for item in cli_tool_list:
|
||||||
if name == item[0]:
|
if name == item[0]:
|
||||||
@@ -694,7 +694,7 @@ class ArgHandler:
|
|||||||
print " %s" % item[0]
|
print " %s" % item[0]
|
||||||
else:
|
else:
|
||||||
print "Unknown action: %s." % action
|
print "Unknown action: %s." % action
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import sets
|
import sets
|
||||||
import shutil
|
import shutil
|
||||||
from xml.parsers.expat import ExpatError, ParserCreate
|
from xml.parsers.expat import ExpatError, ParserCreate
|
||||||
@@ -128,14 +129,14 @@ def importData(database, filename, callback=None,cl=0,use_trans=False):
|
|||||||
if cl:
|
if cl:
|
||||||
print "Error: %s could not be opened Exiting." % filename
|
print "Error: %s could not be opened Exiting." % filename
|
||||||
print msg
|
print msg
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
ErrorDialog(_("%s could not be opened") % filename,str(msg))
|
ErrorDialog(_("%s could not be opened") % filename,str(msg))
|
||||||
return
|
return
|
||||||
except:
|
except:
|
||||||
if cl:
|
if cl:
|
||||||
print "Error: %s could not be opened. Exiting." % filename
|
print "Error: %s could not be opened. Exiting." % filename
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
ErrorDialog(_("%s could not be opened") % filename)
|
ErrorDialog(_("%s could not be opened") % filename)
|
||||||
return
|
return
|
||||||
@@ -147,7 +148,7 @@ def importData(database, filename, callback=None,cl=0,use_trans=False):
|
|||||||
print msg
|
print msg
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
ErrorDialog(_("Error reading %s") % filename,str(msg))
|
ErrorDialog(_("Error reading %s") % filename,str(msg))
|
||||||
import traceback
|
import traceback
|
||||||
@@ -157,7 +158,7 @@ def importData(database, filename, callback=None,cl=0,use_trans=False):
|
|||||||
if cl:
|
if cl:
|
||||||
print "Error reading %s" % filename
|
print "Error reading %s" % filename
|
||||||
print "The file is probably either corrupt or not a valid GRAMPS database."
|
print "The file is probably either corrupt or not a valid GRAMPS database."
|
||||||
os._exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
ErrorDialog(_("Error reading %s") % filename,
|
ErrorDialog(_("Error reading %s") % filename,
|
||||||
_("The file is probably either corrupt or not a valid GRAMPS database."))
|
_("The file is probably either corrupt or not a valid GRAMPS database."))
|
||||||
|
@@ -170,6 +170,11 @@ def run():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
gramps_main.Gramps(args)
|
gramps_main.Gramps(args)
|
||||||
|
except SystemExit, e:
|
||||||
|
if e.code:
|
||||||
|
log.error("Gramps terminated with exit code: %d." % e.code, exc_info=True)
|
||||||
|
gtk.main_quit()
|
||||||
|
return False
|
||||||
except:
|
except:
|
||||||
log.error("Gramps failed to start.", exc_info=True)
|
log.error("Gramps failed to start.", exc_info=True)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user