On Mon, 5 Dec 2016 07:26 am, DFS wrote: > $python program.py column1=2174 and column2='R'
Here is a simple script demonstrating the issue: # --- program.py --- import sys print "argv:", sys.argv print ' '.join(sys.argv[1:]) I haven't tested it on Windows, but on Linux it behaves as you describe (and as Linux users will expect): [steve@ando ~]$ python program.py column1=2174 and column2='R' argv: ['program.py', 'column1=2174', 'and', 'column2=R'] column1=2174 and column2=R This is *absolutely normal behaviour* for the most common shell on Linux, bash. I would expect that the other common shells will do the same thing. Quotation marks need to be escaped if you want the shell to pass them through to the program, either like this: column2="'R'" or like this: column2=\'R\' > It drops the apostrophes, and the subsequent db call throws an error: > sqlite3.OperationalError: no such column: R I'm not sure how to interpret this error, so I'm guessing. Please correct me if I'm wrong, but doesn't this mean that your column is called: single quote R single quote that is, literally 'R', which means that if you were using it in Python code, you would have to write the column name as this? "'R'" If so, perhaps the best solution is to get rid of the quotes in the column names, so that all your users, Windows and Linux, just write this: program.py column1=2174 and column2=R (P.S. what happens if they write program.py column1 = 2174 and column2 = R instead?) > The way it's used in code is: > argcnt = len(sys.argv) > querystr = ' '.join(sys.argv[1:argcnt]) You can simplify that to: querystr = ' '.join(sys.argv[1:]) > I tried using dbl-quotes in the command line, and with the join() > statement, and neither worked. By the time you join the arguments, its too late. You have to quote them first. > 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. (1) It's not bogus. (2) Linux users will expect that you have to escape quotation marks if you want to pass them through the shell. (3) If my interpretation is correct, what *is* bogus is that that your column names include quotes in them. Get rid of the quotes, and your problem goes away. If that's not the case, then you'll either have to get your users to escape the quotes, or you'll have to add them in yourself. (In case this is not obvious by now, this is not a Python issue. This is entirely due to the behaviour of the shell.) -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list