'subprocess.check_output' extra new line?

2013-01-04 Thread sbremal

Hi

I wonder if the additional new line charachter at the end of the standard 
output capture is on purpose with 'subprocess.check_output'?

 subprocess.check_output([ 'cygpath', 'C:\\' ])
'/cygdrive/c\n'

If I do the same from the shell there is no extra new line (which is correct I 
believe):

$ x=$(cygpath C:\\); echo _${x}_
_/cygdrive/c_

Surely I have a workaround. I was more interested whether it was a design flaw.

Cheers
B.
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: 'subprocess.check_output' extra new line?

2013-01-04 Thread sbremal

Very good point, you are absolutely right:

# cygpath C:\\ | od -c
000   /   c   y   g   d   r   i   v   e   /   c  \n
014

'bash' manual also confirms it:

   Command Substitution
   Command substitution allows the output of a command to replace  the  
command  name.   There  are  two
   forms:
  $(command)
   or
  `command`
   Bash  performs  the  expansion  by  executing command and replacing the 
command substitution with the
---   standard output of the command, with any  trailing  newlines  
deleted.   Embedded  newlines  are  not
   deleted,  but they may be removed during word splitting.  The command 
substitution $(cat file) can be
   replaced by the equivalent but faster $( file).
   When the old-style backquote form of substitution is used,  backslash  
retains  its  literal  meaning
   except  when  followed by $, `, or \.  The first backquote not preceded 
by a backslash terminates the
   command substitution.  When using the $(command) form, all characters 
between the parentheses make up
   the command; none are treated specially.
   Command  substitutions may be nested.  To nest when using the backquoted 
form, escape the inner back-
   quotes with backslashes.
   If the substitution appears within double quotes, word splitting and 
pathname expansion are not  per-
   formed on the results.

Cheers
B.


 Date: Sat, 5 Jan 2013 03:14:46 +1100
 Subject: Re: 'subprocess.check_output' extra new line?
 From: ros...@gmail.com
 To: python-list@python.org

 On Sat, Jan 5, 2013 at 2:50 AM, sbre...@hotmail.com wrote:
 
  Hi
 
  I wonder if the additional new line charachter at the end of the standard 
  output capture is on purpose with 'subprocess.check_output'?
 
  subprocess.check_output([ 'cygpath', 'C:\\' ])
  '/cygdrive/c\n'
 
  If I do the same from the shell there is no extra new line (which is 
  correct I believe):
 
  $ x=$(cygpath C:\\); echo _${x}_
  _/cygdrive/c_
 
  Surely I have a workaround. I was more interested whether it was a design 
  flaw.

 What you may have there is the shell $( ) handling changing the
 program's output. Try piping the command into 'hd' or similar to see
 what it actually produces; it's entirely possible the \n is there, and
 the shell is stripping it.

 In any case, you can easily trim whitespace from inside Python. That
 would be your workaround, I think.

 ChrisA
 --
 http://mail.python.org/mailman/listinfo/python-list   
   
-- 
http://mail.python.org/mailman/listinfo/python-list