472,371 Members | 1,550 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,371 software developers and data experts.

Win32: Running python programs from a Cygwin shell

I couldn't think of a good solution, and it's hard to Google for...

I write python command-line programs under Win2k, and I use the bash shell
from Cygwin. I cannot use Cygwin's python package because of a binary
module which has to be compiled with Visual C 6.

My scripts start with a '#!/usr/bin/env python' shebang, as God intended.

Now, I assume I can make cmd.exe run foo.py by asociating *.py with the
python interpreter.

However, if foo.py is in my path and I try to run it from bash, what happens
is:

- bash runs env /cygdrive/h/bin/foo.py
- env runs something like 'python /cygdrive/h/bin/foo.py'
- ... and python (which doesn't know about Cygwin-style paths)
croaks on this, of course

Is there a way around this, which doesn't make my script unusable if I moved
it to a Unix box, or ran it from cmd.exe?

I'd prefer not to write wrapper scripts in perl/bash/BAT...

/Jorgen

--
// Jorgen Grahn <jgrahn@ ''If All Men Were Brothers,
\X/ algonet.se> Would You Let One Marry Your Sister?''
Jul 18 '05 #1
2 14219

You could probably write a replacement for env that uses cygpath -m on the
script file. So, your env could call original env then do cygpath -m on the
second paramter. The one thing to think about is what the shell might do to
other file/directory paramters passed to your script. So, does it convert

foo.py .

into:

python /cygdrive/h/bin/foo.py python /cygdrive/h/bin/

Then your python script might not work. So, do you run cygpath on all paramters?

The other option would be to write a special alias/script just for foo.py to
handle on the oddities. This is what I did to get it to execute gvim for
win32. I wrote a shell function to go through all paramters and run cygpath -m
on everything that does not begin with a '-'.

If cygwin normalized everything to the cygpath -m, then I think that the
integration with win32 would be substantially better. So, in the above
scenario, you would have gotten:

python h:/bin/foo.py python h:/bin/

Both cygwin and win32 can handle this. There would be problems when passing to
CMD.exe because it would see the "/"'s and barf. I seem to remember that
therewas some setting to get command.com or cmd.exe to change the switch char.

Jorgen Grahn wrote:
I couldn't think of a good solution, and it's hard to Google for...

I write python command-line programs under Win2k, and I use the bash shell
from Cygwin. I cannot use Cygwin's python package because of a binary
module which has to be compiled with Visual C 6.

My scripts start with a '#!/usr/bin/env python' shebang, as God intended.

Now, I assume I can make cmd.exe run foo.py by asociating *.py with the
python interpreter.

However, if foo.py is in my path and I try to run it from bash, what happens
is:

- bash runs env /cygdrive/h/bin/foo.py
- env runs something like 'python /cygdrive/h/bin/foo.py'
- ... and python (which doesn't know about Cygwin-style paths)
croaks on this, of course

Is there a way around this, which doesn't make my script unusable if I moved
it to a Unix box, or ran it from cmd.exe?

I'd prefer not to write wrapper scripts in perl/bash/BAT...

/Jorgen


Jul 18 '05 #2
JoeSmith <Jo******@IDontWantSpam.bogus.bogusaddress.com> writes:
You could probably write a replacement for env that uses cygpath -m on
the script file. So, your env could call original env then do cygpath
-m on the second paramter. The one thing to think about is what the
shell might do to other file/directory paramters passed to your
script. So, does it convert

foo.py .

into:

python /cygdrive/h/bin/foo.py python /cygdrive/h/bin/

Then your python script might not work. So, do you run cygpath on all paramters?
(...)
The other option would be to write a special alias/script just for
foo.py to handle on the oddities. This is what I did to get it to
execute gvim for win32. I wrote a shell function to go through all
paramters and run cygpath -m
on everything that does not begin with a '-'.


That sounds very similar to how I have my system setup. I've got bash
functions defined to translate just the first (non-option) argument to
Windows form for use from my bash prompt. I haven't really found it
necessary to process all subsequent arguments (on the rare occasion I
need it I just use `cygpath` myself), and as you point out it might
adversely affect how the commands perceive the input.

I tend to run everything explicitly with "py##" aliases (or python)
from the command line because I bounce between python versions a lot,
so I don't depend on the Windows .py mapping, but presumably a similar
approach could work by an alias for "env".

So for example, my Python relevant section from my .bashrc:

- - - - - - - - - - - - - - - - - - - - - - - - -

#
# Function to pre-process first argument (skipping past options) of a command
# with cygpath to translate paths to for Windows tools.
#
function wpath {
typeset -i cmdstart=1
local cmd=""
local args=""

while arg=${*:$cmdstart:1} && [ "${arg:0:1}" == "-" ]; do
cmdstart=cmdstart+1
done

if [ $# -ge $cmdstart ]; then
cmd=`cygpath -w ${*:$cmdstart:1}`
args=${*:$((cmdstart+1))}
fi

echo ${*:1:$((cmdstart-1))} $cmd $args
}

#
# Function used to execute a command with its first argument translated to
# windows compatible paths.
#
function wcmd {
$1 `wpath ${*:2}`
}

#
# Functions to run explicit Python versions as well as to establish a
# new default path. Automatically use wpath when executing for path names.
#

function py15path
{
export PATH=/c/python/1.5:/c/python/1.5/DLLs:$ORIGPATH
}
function py15
{
PATH=/c/python/1.5:/c/python/1.5/DLLs:$ORIGPATH wcmd python $*
}

function py20path
{
export PATH=/c/python/2.0:/c/python/2.0/DLLs:$ORIGPATH
}
function py20
{
PATH=/c/python/2.0:/c/python/2.0/DLLs:$ORIGPATH wcmd python $*
}

function py21path
{
export PATH=/c/python/2.1:/c/python/2.1/DLLs:$ORIGPATH
}
function py21
{
PATH=/c/python/2.1:/c/python/2.1/DLLs:$ORIGPATH wcmd python $*
}

function py22path
{
export PATH=/c/python/2.2:/c/python/2.2/DLLs:$ORIGPATH
}
function py22
{
PATH=/c/python/2.2:/c/python/2.2/DLLs:$ORIGPATH wcmd python $*
}

function py23path
{
export PATH=/c/python/2.3:/c/python/2.3/DLLs:$ORIGPATH
}
function py23
{
PATH=/c/python/2.3:/c/python/2.3/DLLs:$ORIGPATH wcmd python $*
}

# And establish 'python' to filter through wcmd
alias python='wcmd python'

- - - - - - - - - - - - - - - - - - - - - - - - -
-- David
Jul 18 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Nicolas Lehuen | last post by:
Hi, Is it me, or does anyone else get significantly better pystone results under Cygwin versus the standard Win32 build ? CYGWIN 1.5.6 + python 2.3.3-1 : $ time python...
2
by: | last post by:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 A second request for help... Has anyone run the PyEphem ephemeris application under WinXP? http://rhodesmill.org/brandon/projects/pyephem.html I...
2
by: Christopher Subich | last post by:
From the documentation, it looks like DParser-python will do what I need, but I'm having trouble getting it installed properly. I'm using a win32 environment, with official 2.4 Python binaries. ...
16
by: Kenneth McDonald | last post by:
For unfortunate reasons, I'm considering switching back to Win XP (from OS X) as my "main" system. Windows has so many annoyances that I can only compare it to driving in the Bay Area at rush hour...
3
by: James Stroud | last post by:
Hello All, I am helping someone write a python script to run their DOS application through an SSH terminal. It seems that this program wants to access a DOS shell and send output there. If...
9
by: Endless Story | last post by:
My last version of Python was 2.4, running smoothly on XP with path c: \Python24 - no need even to include this path in PATH; everything worked as it's supposed to at the command line. Just...
40
by: =?iso-8859-1?B?QW5kcuk=?= | last post by:
I'm really annoyed at Python - and not for the reasons already mentioned on this list. Everyone know that programming is supposed to be a dark art, nearly impossible to learn. Computer code is...
8
by: Grant Edwards | last post by:
When I ssh into a windows machine (running Cygwin sshd), I can invoke python at the shell prompt (you have to use -i option and I don't really understand why). Once it's started there are couple...
2
by: Ant | last post by:
Hi all, There's a sweet combination of tools that you can assemble using Vim, a Python shell (or any shell for that matter) and GNU screen, where you essentially send selected text from Vim to...
0
by: Naresh1 | last post by:
What is WebLogic Admin Training? WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge required to effectively administer and manage Oracle...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific technical details, Gmail likely implements measures...
1
by: Matthew3360 | last post by:
Hi, I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web server and have made sure to enable curl. I get a...
0
Oralloy
by: Oralloy | last post by:
Hello Folks, I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA. My problem (spelled failure) is with the synthesis of my design into a bitstream, not the C++...
0
by: Carina712 | last post by:
Setting background colors for Excel documents can help to improve the visual appeal of the document and make it easier to read and understand. Background colors can be used to highlight important...
0
by: Rahul1995seven | last post by:
Introduction: In the realm of programming languages, Python has emerged as a powerhouse. With its simplicity, versatility, and robustness, Python has gained popularity among beginners and experts...
2
by: Ricardo de Mila | last post by:
Dear people, good afternoon... I have a form in msAccess with lots of controls and a specific routine must be triggered if the mouse_down event happens in any control. Than I need to discover what...
1
by: ezappsrUS | last post by:
Hi, I wonder if someone knows where I am going wrong below. I have a continuous form and two labels where only one would be visible depending on the checkbox being checked or not. Below is the...
0
DizelArs
by: DizelArs | last post by:
Hi all) Faced with a problem, element.click() event doesn't work in Safari browser. Tried various tricks like emulating touch event through a function: let clickEvent = new Event('click', {...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.