What is the best way to handle a command line argument that includes an escape sequence like \n?
Steve Holden
steve at holdenweb.com
Thu Mar 3 00:55:56 EST 2005
Joe wrote:
> I'm using Python 2.4 on Windows XP SP2.
>
> I'm trying to receive a command line argument that is a newline (\n)
>
> Here is the command line to use
>
> sample.py "\n"
>
> Here is a sample.py script
>
> import sys
>
> c = sys.argv[1]
>
> # when run c is set to \\n instead of \n.
>
> I created a test batch file
>
> echo %1
>
> to confirm that it was not the cmd.exe command processor causing the issue.
>
> It appears that Python treats the comand line string as a raw string.
>
> Is this a bug? If not what is the best way to work around the issue?
>
> Obviously I could use a hack
>
> if c == '\\n':
> c = '\n'
>
> But surely there is a better way.
>
> NOTE that I used \n in my sample but I also want to support other escape
> sequences too.
>
>
>
I don't want you getting more confused rather than less - newcomers are
sometimes confused by Python's encoding of backslashes and such when
printing out strings. What is your evidence for the assertion that c is
set to \\n rather than \n?
In Unix, it's easier to avoid this, since the shell lets you enter
multi-line strings (note that these lines may wrap in the mail):
[sholden at headrat sholden]$ python -c "import sys; print
repr(sys.argv[1])" "\n"
'\\n'
[sholden at headrat sholden]$ python -c "import sys; print repr(sys.argv[1])" "
> "
'\n'
The first case simply demonstrates that the shell doesn't interpret
backslash escape sequences. I used repr() because that's what the
interpreter will print if you enter an expression at the interactive
prompt. The first case shows that the argument is two characters - you
can verify this using the len() function.
The second case shows how (with a sensible command shell) you can
provide a newline as an argument.
In Windows we can emulate the first case exactly:
C:\Steve>C:\python24\python -c "import sys; print repr(sys.argv[1])" "\n"
'\\n'
Unfortunately Windows XP's command interpreter doesn't bother to wait
until you close a double-quote left open at the end of a line:
C:\Steve>\python24\python -c "import sys; print repr(sys.argv[1])" "
''
So someone else will have to tell you how to do that, but you should be
clear about what's happening before you try and correct the problem.
regards
Steve
--
Meet the Python developers and your c.l.py favorites March 23-25
Come to PyCon DC 2005 http://www.pycon.org/
Steve Holden http://www.holdenweb.com/
More information about the Python-list
mailing list