[issue21416] argparse should accept bytes arguments as originally passed

2015-04-10 Thread Zachary Ware

Changes by Zachary Ware :


--
resolution:  -> not a bug
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21416] argparse should accept bytes arguments as originally passed

2014-06-03 Thread Zachary Ware

Zachary Ware added the comment:

The type parameter of ArgumentParser is a callable that will be called with the 
value of some member of sys.argv, it does *not* specify what the returned type 
will be.  You can just use os.fsencode as the type argument:

>>> import os
>>> import argparse
>>> p = argparse.ArgumentParser()
>>> p.add_argument('somebytes', type=os.fsencode, help='i want some bytes')
_StoreAction(option_strings=[], dest='somebytes', nargs=None, const=None, 
default=None, type=.fsencode at 0x00677AE0>, 
choices=None, help='i want some bytes', metavar=None)
>>> p.parse_args(['test'])
Namespace(somebytes=b'test')
>>> p.parse_args([os.fsdecode(b'\xde\xad\xbe\xef')])
Namespace(somebytes=b'\xde\xad\xbe\xef')

--
nosy: +zach.ware

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21416] argparse should accept bytes arguments as originally passed

2014-05-27 Thread paul j3

paul j3 added the comment:

'invalid bytes value' is the error message generated by 'argparse'.  The 
underlying error (for a string like 'xxx') is:

print(bytes(sys.argv[1]))
TypeError: string argument without an encoding

You could use 'bytes' if you somehow supply the encoding, as in:

def mybytes(astr):
   return bytes(astr, 'utf-8')

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21416] argparse should accept bytes arguments as originally passed

2014-05-27 Thread paul j3

paul j3 added the comment:

Two points to keep in mind:

'argparse' works with 'sys.argv[1:]'.  If that does not contain what you want, 
then you can pass your own 'argv' to 'parse_args'.

'type=bytes' means, call the builtin 'bytes' function with one of the argv 
strings. If 'bytes' does not handle the string as you want, then you need to 
write your own function.

--
nosy: +paul.j3

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue21416] argparse should accept bytes arguments as originally passed

2014-05-02 Thread Derek Wilson

New submission from Derek Wilson:

If I create an argument parser like:

parser = argparse.ArgumentParser()
parser.add_argument('somebytes', type=bytes, help='i want some bytes')
parser.parse_args()

the parse_args() call will raise an exception printing usage info indicating 
that an "invalid bytes value" was passed if any of the bytes on the command 
line are >127.

if i'm specifying that i want bytes then i should expect that the argument 
should be interpreted as bytes and not text.

I get that #8776 was closed because it makes sense not to clutter up internals, 
but in this instance i am building a command line parser and telling it exactly 
what i expect. if the solution from #8776 of os.fsencode(sys.argv) will 
definitely always work then argparse should do this internally if i tell it i 
expect bytes on the command line.

--
components: Library (Lib)
messages: 217761
nosy: underrun
priority: normal
severity: normal
status: open
title: argparse should accept bytes arguments as originally passed
type: behavior
versions: Python 3.4, Python 3.5

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com