Connecting Tech Pros Worldwide Help | Site Map

path backslash escaping trouble

placid
Guest
 
Posts: n/a
#1: Jul 10 '07
Hi All,

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@@\m ain\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\buildmod s\3

but this path is escaped
\\ipsupport\\ipbuild\\Wizard\\build.pl@@\\main\\bu ildmods\\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!

My question is, is there a function in Python that only escapes
backslashes?

Cheers

Sion Arrowsmith
Guest
 
Posts: n/a
#2: Jul 10 '07

re: path backslash escaping trouble


placid <Bulkan@gmail.comwrote:
Quote:
>I have these files; [ ... ]
>
>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\buildmo ds\3
>
>but this path is escaped
>\\ipsupport\\ipbuild\\Wizard\\build.pl@@\\main\\b uildmods\\3
How are you reading the file in? Are you absolutely sure that the
escaping appears *in the string*, and isn't being done by whatever
you're using to inspect it?

Consider:
Quote:
Quote:
Quote:
>>s = open('/tmp/Elements').read()
>>s
'Elements::::\\ipsupport\\ipbuild\\Wizard\\build.p l@@\\main\\buildmods\\3::::\n'
Quote:
Quote:
Quote:
>>len(s)
70

Now, if those backslashes had *really* been escaped, the string would be
length 77, wouldn't it?
Quote:
Quote:
Quote:
>>s.find('\\\\')
-1

And find() can't find any double-backslashes in there.

--
\S -- siona@chiark.greenend.org.uk -- http://www.chaos.org.uk/~sion/
"Frankly I have no feelings towards penguins one way or the other"
-- Arthur C. Clarke
her nu becomež se bera eadward ofdun hlęddre heafdes bęce bump bump bump
Gabriel Genellina
Guest
 
Posts: n/a
#3: Jul 11 '07

re: path backslash escaping trouble


En Mon, 09 Jul 2007 22:40:04 -0300, placid <Bulkan@gmail.comescribió:
Quote:
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@@\m ain\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\buildmod s\3
>
but this path is escaped
\\ipsupport\\ipbuild\\Wizard\\build.pl@@\\main\\bu ildmods\\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 Genellina

placid
Guest
 
Posts: n/a
#4: Jul 12 '07

re: path backslash escaping trouble


On Jul 11, 10:37 am, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
Quote:
En Mon, 09 Jul 2007 22:40:04 -0300, placid <Bul...@gmail.comescribió:
>
>
>
Quote:
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)
>
Quote:
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@@\m ain\buildmods\3::::
>
Quote:
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\buildmod s\3
>
Quote:
but this path is escaped
\\ipsupport\\ipbuild\\Wizard\\build.pl@@\\main\\bu ildmods\\3
>
Quote:
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\buildmod s\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


Closed Thread


Similar Python bytes