[Python-bugs-list] [ python-Bugs-423728 ] improper value of sys.argv with '-c' opt

noreply@sourceforge.net noreply@sourceforge.net
Sun, 13 May 2001 12:41:55 -0700


Bugs item #423728, was updated on 2001-05-13 08:04
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=423728&group_id=5470

Category: Python Interpreter Core
Group: Not a Bug
Status: Closed
Resolution: Invalid
Priority: 5
Submitted By: Frederic Giacometti (giacometti)
Assigned to: Nobody/Anonymous (nobody)
Summary: improper value of sys.argv with '-c' opt

Initial Comment:

Python 2,1 gives the following result:

---
python -c "import sys; print sys.argv"
[ '-c']
---

This is uncorrect and error-prone.

The two (possible) correct answers are:
    [] # strip off the '-c' stuff
  or
    [ '-c', 'import sys; print sys.argv'] # keep the '-c' stuff

  but ['-c'] alone is definitely uncorrect, as well as it does not make sense.

The source of the problem can explicitly be traced to file Python-2.1 -main.c, line 287:
  argv[_PyOS_optind] = "-c"; 
        (cf. [ python-Bugs-422678 ] (argv is modified in Py_Main())

which modifies 'argv' as side effect; this then messes up the initialization of 'sys.argv'.

Note: This bug is another side effect of [ python-Bugs-422678 ]

FG


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

>Comment By: Frederic Giacometti (giacometti)
Date: 2001-05-13 12:41

Message:
Logged In: YES 
user_id=93657


Come on... this would be one of the least minor changes ever submitted, and it will be for all the better in 
regard to Python's technical quality (coherency, robustness, and ease of integration into other systems).

I can't see any down-sides to the change, and you could hardly thing of a smallest and easiest patch.

I tested the change, and submitted the patch (patch number 423759): it is the suppression of one single 
line in the source code, and updating the LaTex documentation for sys.argv.

Thanks,

FG


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

Comment By: Tim Peters (tim_one)
Date: 2001-05-13 11:50

Message:
Logged In: YES 
user_id=31435

Passing "-c" in this situation has been documented behavior 
for 10 years:  we couldn't change that now even if we 
wanted to.  That's why I pointed you to the docs (which 
this report showed no awareness of).


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

Comment By: Frederic Giacometti (giacometti)
Date: 2001-05-13 11:27

Message:
Logged In: YES 
user_id=93657

I am sorry, but:

- 'some; arg' is a legal Unix/Windows file name
- it is better than than '-c'
- it does not 'bloat' the code, while creating problems elsewhere
- if you really want something 'as good as anything', as you say: --> use '', the empty name, or even None.

I wish you would give a little more consideration, and stop refering me to reference manuals, obfuscating 
the issue, and as if I did not know them.

Thanks,

FG


FG

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

Comment By: Tim Peters (tim_one)
Date: 2001-05-13 11:17

Message:
Logged In: YES 
user_id=31435

Not a bug.  Note also, e.g.,

> python -c "import sys; print sys.argv" a b c
['-c', 'a', 'b', 'c']

See the docs for sys.argv (in the Library manual) -- this 
is the documented and intended behavior.  argv[0] is (as 
also in C) supposed to be the name of the script, but when 
the script is passed literally on the cmdline there is no 
sensible name.  "-c" is as good as anything then.  
*Something* name-like must be passed in argv[0] else code 
that examines sys.argv would have to know whether or not 
Python started via -c.

argv[1:] is supposed contain the arguments to the script.  
Since the expression following -c *is* the script, it would 
be incorrect to leave that in argv:  the script is not an 
argument to itself, after all.


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

Comment By: Frederic Giacometti (giacometti)
Date: 2001-05-13 11:17

Message:
Logged In: YES 
user_id=93657

Actually, I need to correct something.

When using 'python -c "some; cmd", the expected value for sys.argv would be either:
  [ ''] # sys.argv value in interactive mode -> sys.argv[ 0] == ''
or
  [ 'some; cmd'] # value of the '-c' option: -> sys.argv[ 0] == 'some; cmd' - this contains more information

In this case, lines 283-288 from main.c could just be deleted.

FG


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

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=423728&group_id=5470