On 04/12/2016 20:26, DFS wrote:
$python program.py column1=2174 and column2='R'
Windows (correct)
$print sys.argv[3]
column2='R'
Linux (incorrect)
$print sys.argv[3]
column2=R
It drops the apostrophes, and the subsequent db call throws an error:
sqlite3.OperationalError: no such column: R
The way it's used in code is:
argcnt = len(sys.argv)
querystr = ' '.join(sys.argv[1:argcnt])
I tried using dbl-quotes in the command line, and with the join()
statement, and neither worked.
Edit: I got it to work this way:
column2="'R'"
but that's bogus, and I don't want users to have to do that.
You can put double quotes around the whole thing:
"column2='R'"
otherwise I don't know what the solution other than for a program be
aware of the possibility and allow for either input, if there are no
conflicts (for example if both R and 'R' are valid inputs and mean
different things).
Command parameters /do/ behave differently between Windows and Linux,
for example try writing *.* as that third parameter.
In Windows, it will print *.*.
In Linux, if you have 273 files in the current directory, if will print
the name of the first, and there will be /272 further command
parameters/, each the name of a file. (I couldn't believe this when I
found out; one of my directories recently had 3.4 million files in it, I
don't really want *.* expanded to 3.4m arguments. Here, the fix is again
to use double quotes: "*.*". But what if the user doesn't do that?)
--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list