Browse code

* s3cmd: Better Exception output. Print sys.path on ImportError, don't print backtrace on KeyboardInterrupt

git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@286 830e0280-6d2a-0410-9c65-932aecc39d9d

Michal Ludvig authored on 2008/12/12 09:31:38
Showing 2 changed files
... ...
@@ -1,3 +1,8 @@
1
+2008-12-12  Michal Ludvig  <michal@logix.cz>
2
+
3
+	* s3cmd: Better Exception output. Print sys.path on ImportError,
4
+	  don't print backtrace on KeyboardInterrupt
5
+
1 6
 2008-12-11  Michal Ludvig  <michal@logix.cz>
2 7
 
3 8
 	* s3cmd: Support for multiple sources in 'get' command.
... ...
@@ -1215,9 +1215,14 @@ if __name__ == '__main__':
1215 1215
 
1216 1216
 		main()
1217 1217
 		sys.exit(0)
1218
+
1218 1219
 	except SystemExit, e:
1219 1220
 		sys.exit(e.code)
1220 1221
 
1222
+	except KeyboardInterrupt:
1223
+		sys.stderr.write("See ya!\n")
1224
+		sys.exit(1)
1225
+
1221 1226
 	except Exception, e:
1222 1227
 		sys.stderr.write("""
1223 1228
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
... ...
@@ -1227,10 +1232,23 @@ if __name__ == '__main__':
1227 1227
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1228 1228
 
1229 1229
 """)
1230
-		sys.stderr.write("S3cmd:  %s\n" % PkgInfo.version)
1231
-		sys.stderr.write("Python: %s\n" % sys.version.replace('\n', ' '))
1230
+		tb = traceback.format_exc(sys.exc_info())
1231
+		e_class = str(e.__class__)
1232
+		e_class = e_class[e_class.rfind(".")+1 : -2]
1233
+		sys.stderr.write("Problem: %s: %s\n" % (e_class, str(e)))
1234
+		try:
1235
+			sys.stderr.write("S3cmd:   %s\n" % PkgInfo.version)
1236
+		except NameError:
1237
+			sys.stderr.write("S3cmd:   unknown version. Module import problem?\n")
1238
+		sys.stderr.write("Python:  %s\n" % sys.version.replace('\n', ' '))
1232 1239
 		sys.stderr.write("\n")
1233
-		sys.stderr.write(traceback.format_exc(sys.exc_info())+"\n")
1240
+		sys.stderr.write(tb)
1241
+		if type(e) == ImportError:
1242
+			sys.stderr.write("\n")
1243
+			sys.stderr.write("Your sys.path contains these entries:\n")
1244
+			for path in sys.path:
1245
+				sys.stderr.write("\t%s\n" % path)
1246
+			sys.stderr.write("Now the question is where has S3/S3.py been installed?\n")
1234 1247
 		sys.stderr.write("""
1235 1248
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1236 1249
     An unexpected error has occurred.