[issue17366] os.chdir win32

2013-03-05 Thread Dave Humphries

New submission from Dave Humphries:

os.chdir missed a back slash in rewriting a file path see example below (the 
extra backslash was missing from the trunk directory). 
Modifying the path with an extra slash enabled this to work for some reason. 
(os windows 8 64 bit Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 
32 bit (Intel)] on win32 :
spyder console output:
>>> os.chdir("C:\Projects\trunk\BusPirate\dangerous-prototypes-open-hardware-read-only\Bus_Pirate\scripts\pyBusPirateLite")
Traceback (most recent call last):
  File "", line 1, in 
WindowsError: [Error 123] The filename, directory name or volume label syntax 
is incorrect: 
'C:\\Projects\trunk\\BusPirate\\dangerous-prototypes-open-hardware-read-only\\Bus_Pirate\\scripts\\pyBusPirateLite'
>>> os.chdir("C:\Projects\\trunk\BusPirate\dangerous-prototypes-open-hardware-read-only\Bus_Pirate\scripts\pyBusPirateLite")
>>> from pyBusPirateLite.SPI import *

--
components: Windows
messages: 183582
nosy: DaveH
priority: normal
severity: normal
status: open
title: os.chdir win32
type: behavior
versions: Python 2.7

___
Python tracker 
<http://bugs.python.org/issue17366>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17366] os.chdir win32

2013-03-06 Thread Dave Humphries

Dave Humphries added the comment:

Hi Amaury,
As I can't reopen the bug I will have to add it here (or open a new bug report).

The issue was about the string used in os.chdir() particularly.
While this is expected behaviour in a python string it is not expected
behaviour from a well formed file path:
1. \t and \n are errors when used in a path.
2. A well formed Windows path with directories that start with a t or
n is interpreted as tabs and line feeds by Python. That is certainly
not expected behaviour in Windows this also means that any Python
built in method that uses the os.chdir() with a standard format
environment variable or registry setting will fail with the same
issue. It also sounds like any os module method will also be affected.
3. This issue took 1/2 hr to resolve. This makes python unreliable to
use on Windows with a difficult to find bug.

The suggestion of using forward slashes is unworkable when the scripts
will be used across a range of computers where environment or registry
variables get used.

My suggestion is that the os methods get rewritten so that path
parsing rules match the expected behaviour for the platform.

Regards,
Dave

On Wed, Mar 6, 2013 at 7:50 PM, Amaury Forgeot d'Arc
 wrote:
>
> Amaury Forgeot d'Arc added the comment:
>
> The backslash \ has a special meaning in strings: \n is the new line 
> character, and \t is the tab character: 
> http://docs.python.org/2/reference/lexical_analysis.html#string-literals
>
> Try to print the string!
> You could use \\, or raw strings r"like this".
> Or just use forward slashes / which are allowed by Windows.
>
> --
> nosy: +amaury.forgeotdarc
> resolution:  -> invalid
> status: open -> closed
>
> ___
> Python tracker 
> <http://bugs.python.org/issue17366>
> ___

--

___
Python tracker 
<http://bugs.python.org/issue17366>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17366] os.chdir win32

2013-03-07 Thread Dave Humphries

Dave Humphries added the comment:

Thanks for the thoughtful response Tim,
I am obviously not being clear with the way I express this. os.chdir
uses a common string but these strings represent a special subset of
strings. I'm not sure about mac and linux but windows has arrange of
characters that cannot appear in a path amoung them \t and \n.

My expectation was that a platform os.chdir would parse the string for
these characters and do something intelligent with them i.e a legal
path from any of the systems (mac, linux or windows) passed in as a
string to os.chdir would be converted to something that worked
correctly. This is obviously a bigger challenge than it appears on the
surface.

I will attempt to write some code that will work around this for my
use but I am wondering how other code resolves this issue (currently I
have an environment variable used by a python app written by some else
that seems to be suffering with this and the only solution seems to be
renaming directories).

This seems to place a large unseen burden on developers trying to
write cross-platform scripts that will work.

Thanks again

Dave

 Thu, Mar 7, 2013 at 8:11 PM, Tim Golden  wrote:
>
> Tim Golden added the comment:
>
> Dave, you seem to misunderstand what's happening here: the os.chdir
> function doesn't have access to the characters which are typed in
> the script or in the interpreter. It receives a Python string object.
> The parser etc. which constructs the string object determines which
> characters are special, which are not, and so on. It also takes
> account of special prefixes such as r"", u"" and so on. Neither of
> these two things knows about the other. The parser doesn't know
> anything about the use the string will be put to; the os.chdir code
> doesn't know anything about the origins of the string it's receiving.
>
> This is true of Python and I doubt that it's very different for any
> other language you care to name. It's certainly true -- mutatis mutandis
> -- of C where *exactly* the same issue applies. Here's the
> MSDN page for the MS CRT _chdir function:
>
>   http://msdn.microsoft.com/en-us/library/bf7fwze1(v=vs.80).aspx
>
> In the example half way down, you can see the warning about single
> backslashes.
>
> Every language brings its learning points. In Python, if you want
> to include backslashes in a literal string, you need to prefix that
> string with an r"" prefix, eg r"c:\temp". Speaking as someone who
> uses Python on Windows on a daily basis and has done so for some years,
> this really isn't an issue once you're over the initial "Why did that
> not work?" blip. Using forward slashes is often a perfectly good way,
> sometimes not.
>
> In short, whatever else this is, it's not a Python bug and it's not
> going to change in the near future. I freely admit that the Python
> world is dominated by Unix-types for whom backslashes have little
> significance, and that can colour the emphasis which are given to
> some things but Python is very far from unworkable on Windows.
>
> TJG
>
> On 06/03/2013 21:38, Dave Humphries wrote:
>>
>> Dave Humphries added the comment:
>>
>> Hi Amaury,
>> As I can't reopen the bug I will have to add it here (or open a new bug 
>> report).
>>
>> The issue was about the string used in os.chdir() particularly.
>> While this is expected behaviour in a python string it is not expected
>> behaviour from a well formed file path:
>> 1. \t and \n are errors when used in a path.
>> 2. A well formed Windows path with directories that start with a t or
>> n is interpreted as tabs and line feeds by Python. That is certainly
>> not expected behaviour in Windows this also means that any Python
>> built in method that uses the os.chdir() with a standard format
>> environment variable or registry setting will fail with the same
>> issue. It also sounds like any os module method will also be affected.
>> 3. This issue took 1/2 hr to resolve. This makes python unreliable to
>> use on Windows with a difficult to find bug.
>>
>> The suggestion of using forward slashes is unworkable when the scripts
>> will be used across a range of computers where environment or registry
>> variables get used.
>>
>> My suggestion is that the os methods get rewritten so that path
>> parsing rules match the expected behaviour for the platform.
>>
>> Regards,
>> Dave
>>
>> On Wed, Mar 6, 2013 at 7:50 PM, Amaury Forgeot d'Arc
>>  wrote:
>>>
>>> Amaury Forgeot d'Arc added the comment:
>>>
>>> The backslash \ has a special meaning in st