path backslash escaping trouble

placid Bulkan at gmail.com
Thu Jul 12 01:31:40 EDT 2007


On Jul 11, 10:37 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Mon, 09 Jul 2007 22:40:04 -0300, placid <Bul... at gmail.com> escribió:
>
>
>
> > I have these files; which are Merge Request (ClearCase) files that are
> > created by a Perl CGI script (being re-written in Python, as the HTML/
> > JavaScript have been mixed with Perl, maintainability is zero)
>
> > MergeType::::codefromlabel::::
> > BLname::::BUILDMODS::::
> > OldLname::::::::
> > BaseVersion::::6.9.1.24A::::
> > RequiredRelease::::6.10.1.3::::
> > Description::::::::
> > FixRelation::::::::
> > Dependencies::::::::
> > LpAffected::::No::::
> > CodeReview::::FirstName LastName::::
> > Testing::::Compile/Build;Designer;Smoketests;::::
> > OtherTesting::::::::
> > Vobs::::ipsupport;::::
> > Elements::::\ipsupport\ipbuild\Wizard\build.pl@@\main\buildmods\3::::
>
> > i read this whole file into a string so i can search for the value of
> > Elements which is
> > \ipsupport\ipbuild\Wizard\build.pl@@\main\buildmods\3
>
> > but this path is escaped
> > \\ipsupport\\ipbuild\\Wizard\\build.pl@@\\main\\buildmods\\3
>
> > so when i try to escape a string containing that same path using any
> > of the os.path escaping methods doesnt
> > result in the correct escaped path. It either appends "C:\\" in front
> > of the string with all the backslashes escaped
> > or it converts the three(3) at then end to "x03" and a match doesnt
> > occur!
>
> You may be confused about the actual string contents: "a\\b" contains
> exactly 3 characters, the second being a single backslash. The \ is the
> escape character; to include an actual \ inside a string, you have to
> double it. Another way is to use raw string literals (supressing escape
> processing): r"a\\b" contains four characters.
> See section 3.1.2 in the Python tutorial or the Reference (more
> technical):http://docs.python.org/ref/strings.html
>
> --
> Gabriel

When a user submits a merge request the Python script creats a
subprocess and reads the stdout via a pipe (cleartool find ...) which
returns elements that have a particular label. These elements appeared
like;

\ipsupport\ipbuild\Wizard\build.pl@@\main\buildmods\3

these elements are then checked againts previously submitted merge
requests to see if there are any merge requests that require the
same elements to be merged too. When the elements are read from the
stdout pipe of the subprocess the backslashes aren't escaped and
because these "paths" aren't real windows paths non of the os.path...
path escaping methods work!

Well i've solved the problem just by using pycleartool "links directly
against ClearCase libraries" which returns a tuple
containing (status,output,error) and the element paths in output are
properly escaped.

Thanks for the replies





More information about the Python-list mailing list