I am trying to pass the command line argument with white space in it, but sys.argv[1].strip()
gives me only first word of the argument
import sys, os
docname = sys.argv[1].strip()
e.g. $ python myscript.py argument with whitespace
If I try to debug - docname gives me output as argument
instead of argument with whitespace
I tried to replace the white space with .replace(" ","%20")
method but that didn't help
You need to use argv[1:]
instead of argv[1]
:
docname = sys.argv[1:]
To print it as a string:
' '.join(sys.argv[1:]) # Output: argument with whitespace
sys.argv[0]
is the name of the script itself, and sys.argv[1:]
is a list of all arguments passed to your script.
Output:
>>> python myscript.py argument with whitespace
['argument', 'with', 'whitespace']
This has nothing to do with Python and everything to do with the shell. The shell has a feature called wordsplitting that makes each word in your command invocation a separate word, or arg. To pass the result to Python as a single word with spaces in it, you must either escape the spaces, or use quotes.
./myscript.py 'argument with whitespace'
./myscript.py argument\ with\ whitespace
In other words, by the time your arguments get to Python, wordsplitting has already been done, the unescaped whitespace has been eliminated and sys.argv
is (basically) a list of words.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With