我正在尝试传递带有空格的命令行参数,但是sys.argv[1].strip()
只给出了参数的第一个单词
import sys, os
docname = sys.argv[1].strip()
e.g. $ python myscript.py argument with whitespace
如果我尝试调试 - docname将输出设为argument
而不是argument with whitespace
我尝试用.replace(" ","%20")
方法替换空格,但这没有帮助
答案 0 :(得分:10)
这与Python无关,也与shell无关。 shell有一个名为 wordsplitting 的功能,它使命令调用中的每个单词成为一个单独的单词或arg。要将结果作为包含空格的单个单词传递给Python,您必须转义空格或使用引号。
./myscript.py 'argument with whitespace'
./myscript.py argument\ with\ whitespace
换句话说,当你的参数进入Python时,已经完成了wordsplitting,已经消除了未转义的空白,sys.argv
(基本上)是一个单词列表。
答案 1 :(得分:1)
您需要使用argv[1:]
代替argv[1]
:
docname = sys.argv[1:]
将其打印为字符串:
' '.join(sys.argv[1:]) # Output: argument with whitespace
sys.argv[0]
是脚本本身的名称,sys.argv[1:]
是传递给脚本的所有参数的列表。
<强>输出:强>
>>> python myscript.py argument with whitespace
['argument', 'with', 'whitespace']
答案 2 :(得分:1)
您可以在命令行中使用双引号字符串文字。喜欢
python myscript.py "argument with whitespace"
其他:
python myscript.py argument with whitespace
在这里您也可以使用反斜杠:
python myscript.py argument\ with\ whitespace\
答案 3 :(得分:0)
尝试使用argparse:
#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--file",
help="specify the file to be used (enclose in double-quotes if necessary)",
type=str)
args = parser.parse_args()
if args.file:
print("The file requested is:", args.file)
结果是:
$ ./ex_filename.py --help
usage: ex_filename.py [-h] [-f FILE]
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE specify the file to be used (enclose in double-quotes
if necessary)
$ ./ex_filename.py -f "~/testfiles/file with whitespace.txt"
The file requested is: ~/testfiles/file with whitespace.txt
$
请注意,-h / --help是“免费的”。