from traitlets import default, HasTraits, Integer, Unicode
from traitlets.config import Configurable, Config
class MyClass(Configurable):
s = Unicode('default', config=True, help="my s")
i = Integer(5, config=True, help="an integer")
notconfigurable = Float(1.5, help="This isn't configurable")
print(MyClass.class_config_rst_doc())
MyClass.i : Int Default: ``5`` an integer MyClass.s : Unicode Default: ``'default'`` my s
c = MyClass(s='x')
c.s
'x'
class MyClass2:
def __init__(self, s='default', i=5):
self.s = s
self.i = 5
import socket
class MyClass3(Configurable):
hostname = Unicode('something', help="my hostname")
@default('hostname')
def _hostname_default(self):
return socket.gethostname()
MyClass3().hostname
'k5.simula.no'
c.s = "some string"
c.s
'some string'
c.s = 5
--------------------------------------------------------------------------- TraitError Traceback (most recent call last) <ipython-input-6-a90974018a65> in <module>() ----> 1 c.s = 5 ~/conda/lib/python3.6/site-packages/traitlets/traitlets.py in __set__(self, obj, value) 583 raise TraitError('The "%s" trait is read-only.' % self.name) 584 else: --> 585 self.set(obj, value) 586 587 def _validate(self, obj, value): ~/conda/lib/python3.6/site-packages/traitlets/traitlets.py in set(self, obj, value) 557 558 def set(self, obj, value): --> 559 new_value = self._validate(obj, value) 560 try: 561 old_value = obj._trait_values[self.name] ~/conda/lib/python3.6/site-packages/traitlets/traitlets.py in _validate(self, obj, value) 589 return value 590 if hasattr(self, 'validate'): --> 591 value = self.validate(obj, value) 592 if obj._cross_validation_lock is False: 593 value = self._cross_validate(obj, value) ~/conda/lib/python3.6/site-packages/traitlets/traitlets.py in validate(self, obj, value) 2052 msg = "Could not decode {!r} for unicode trait '{}' of {} instance." 2053 raise TraitError(msg.format(value, self.name, class_of(obj))) -> 2054 self.error(obj, value) 2055 2056 ~/conda/lib/python3.6/site-packages/traitlets/traitlets.py in error(self, obj, value) 623 e = "The '%s' trait must be %s, but a value of %r was specified." \ 624 % (self.name, self.info(), repr_type(value)) --> 625 raise TraitError(e) 626 627 def get_metadata(self, key, default=None): TraitError: The 's' trait of a MyClass instance must be a unicode string, but a value of 5 <class 'int'> was specified.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', dest='verbose', action='store_true')
parser.add_argument('file', type=str, help="a file")
parser.parse_args()
usage: ipykernel_launcher.py [-h] [-v] file ipykernel_launcher.py: error: unrecognized arguments: -f
An exception has occurred, use %tb to see the full traceback. SystemExit: 2
/Users/benjaminrk/conda/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2971: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
sys.argv
['/Users/benjaminrk/conda/lib/python3.6/site-packages/ipykernel_launcher.py', '-f', '/Users/benjaminrk/Library/Jupyter/runtime/kernel-529512a8-9a53-454d-93b3-b512fa5f95d1.json']
parser.parse_args(['myfile'])
Namespace(file='myfile', verbose=False)
parser.parse_args(["-v", 'myfile'])
Namespace(file='myfile', verbose=True)
!python /Users/benjaminrk/dev/ip/scripts/showargs.py -v myfile has spaces
['/Users/benjaminrk/dev/ip/scripts/showargs.py', '-v', 'myfile', 'has', 'spaces']
!python /Users/benjaminrk/dev/ip/scripts/showargs.py -v "myfile has spaces"
['/Users/benjaminrk/dev/ip/scripts/showargs.py', '-v', 'myfile has spaces']
sys.argv
['/Users/benjaminrk/conda/lib/python3.6/site-packages/ipykernel_launcher.py', '-f', '/Users/benjaminrk/Library/Jupyter/runtime/kernel-529512a8-9a53-454d-93b3-b512fa5f95d1.json']
def main(argv=None):
print(parser.parse_args(argv))
main()
usage: ipykernel_launcher.py [-h] [-v] file ipykernel_launcher.py: error: unrecognized arguments: -f
An exception has occurred, use %tb to see the full traceback. SystemExit: 2
/Users/benjaminrk/conda/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2971: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
def find_six(seq):
for i, item in enumerate(seq):
if item == 6:
print(f"Found 6 at index {i}")
break
else:
print("Never found 6!")
find_six([1, 2, 6, 5])
Found 6 at index 2 Never found 6!
find_six([1, 2, 3])
Never found 6!
from subprocess import Popen, PIPE, STDOUT
p = Popen(['echo', 'hi']) #, stdout=PIPE)
p.wait()
type(p.stdout)
NoneType