ui: look before you leap on sys.stderr.closed (and look nicer)
f83291e5643e introduced a fix if sys.stdout.closed does not exist.
This change uses a getattr with default instead of hasattr (which just calls
getattr) and accessing the attribute.
Additionally it applies the same fix for sys.stderr.closed as this is not
available in the bpython shell (reported by Roger Gammans).
% create source repository
adding a
adding b
% clone and pull to break links
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 2 changes to 2 files
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
% relink
relinking .hg/store
collected 5 candidate storage files
not linkable: 00changelog.i
not linkable: 00manifest.i
not linkable: data/b.i
pruned down to 2 probably relinkable files
relink: data/a.i 1/2 files (50.00%)
not linkable: data/dummy.i
relinked 1 files (136 bytes reclaimed)
% check hardlinks
repo/.hg/store/data/a.i == clone/.hg/store/data/a.i
repo/.hg/store/data/b.i != clone/.hg/store/data/b.i