在Python中使用whitespace传递命令行参数

时间:2016-12-13 16:02:37

标签: python linux python-2.7 python-3.x

我正在尝试传递带有空格的命令行参数,但是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")方法替换空格,但这没有帮助

4 个答案:

答案 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是“免费的”。