7

Quoting from docs.python.org:

"sys.argv The list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0] is the empty string."

Am I missing something, or sys.argv[0] always returns the script name, and to get '-c' I'd have to use sys.argv[1]?

I'm testing with Python 3.2 on GNU/Linux.

Mogsdad
  • 44,709
  • 21
  • 151
  • 275
kynikos
  • 1,152
  • 4
  • 14
  • 25
  • 2
    Eheh I stupidly misinterpreted `-c` as just an example option, instead of a real option for `python`, nevermind... – kynikos Mar 07 '11 at 17:03

3 Answers3

12

No, if you invoke Python with -c to run commands from the command line, your sys.argv[0] will be -c:

C:\Python27>python.exe -c "import sys; print sys.argv[0]"
-c
Daniel DiPaolo
  • 55,313
  • 14
  • 116
  • 115
8

When Python is invoked as python script.py then sys.argv[0] == 'script.py'. When you invoke python -c 'import sys; print sys.argv' then sys.argv[0] == '-c' indicating the script body was passed as a string on the command line.

samplebias
  • 37,113
  • 6
  • 107
  • 103
0

python -c executes a command passed on the command line, rather than a script from a file. sys.argv[0] will be set to "-c".

If you run a script with a -c flag, then yes, sys.argv[1] will be set to "-c" and sys.argv[0] will be set to the name of the script.

Wooble
  • 87,717
  • 12
  • 108
  • 131
  • I just thought of `-c` as an example, like in `script -c`, and didn't think of it as the real python option... ^^' – kynikos Mar 07 '11 at 17:06