views:

768

answers:

3

I have a simple script blah.py:

import sys
print sys.argv[1]

If I execute my script by:

python c:/..../blah.py argument

It prints argument but if I execute script by:

blah.py argument

error occurs: IndexError...

So arguments do not pass to script.

python.exe in PATH. Folder with blah.py also in PATH. python.exe is default program to execute *.py files.

What is the problem?

A: 

Can you execute python.exe from any map? If you do not, chek if you have proper values for python.exe in PATH enviroment

Are you in same directory than blah.py. Check this by issuing command -> edit blah.py and check if you can open this file

EDIT:

In that case you can not. (python arg means that you call python.exe whit some parameters which python assume that is filename of script you want to run)

You can create bat file whit lines in your path map and run .bat file

Example:
In one of Path maps create blah.py.bat Edit file and put line

python C:\Somedir\blah.py

You can now run blah.py from anywere, becuase you do not need to put .bat extention when running bat files

ralu
python in PATH.And directory which contains blah.py also in PATH.The main idea is to execute python script without writing full path to it. But now I have problems with arguments passing.
ton4eg
Ralu, you don't need a batch file to execute a python script this way. Use the PATHEXT environment var to include .py and .pyw as executable extensions. This var is why you don't need to specify .bat either.
Todd
+2  A: 

you should make the default application to handle python files be python.exe.

right click a *.py file, select "Open With" dialog. In there select "python.exe" and check "always use this program for this file type" (something like that).

then your python files will always be run using python.exe

santosc
Hmm. It was python.exe for *.py but I pressed restore button and now it works fine. Thank you.
ton4eg
+4  A: 

When you execute a script without typing "python" in front, you need to know two things about how Windows invokes the program. First is to find out what kind of file Windows thinks it is:

    C:\>assoc .py
    .py=Python.File

Next, you need to know how Windows is executing things with that extension. It's associated with the file type "Python.File", so this command shows what it will be doing:

    C:\>ftype Python.File
    Python.File="c:\python26\python.exe" "%1" %*

So on my machine, when I type "blah.py foo", it will execute this exact command, with no difference in results than if I had typed the full thing myself:

    "c:\python26\python.exe" "blah.py" foo

If you type the same thing, including the quotation marks, then you'll get results identical to when you just type "blah.py foo". Now you're in a position to figure out the rest of your problem for yourself.

(Or post more helpful information in your question, like actual cut-and-paste copies of what you see in the console. Note that people who do that type of thing get their questions voted up, and they get reputation points, and more people are likely to help them with good answers.)

Peter Hansen