2016-12-13 10 views
0

Я пытаюсь передать аргументы командной строки с пробелами в нем, но sys.argv[1].strip() дает мне только первое слово аргументаПередача аргументов командной строки с пробелами в Python

import sys, os 
docname = sys.argv[1].strip() 

e.g. $ python myscript.py argument with whitespace 

Если я пытаюсь отлаживать - DOCNAME дает мне выход, как argument вместо argument with whitespace

Я попытался заменить белое пространство .replace(" ","%20") методом, но это не помогло

ответ

8

Это не имеет ничего общего с Python и все, что с оболочкой. Оболочка имеет функцию wordsplitting, которая делает каждое слово в вашей команде вызовом отдельным словом или arg. Чтобы передать результат в Python как одно слово с пробелами в нем, вы должны либо избежать пробелов, либо использовать кавычки.

./myscript.py 'argument with whitespace' 
./myscript.py argument\ with\ whitespace 

Другими словами, к тому времени ваши аргументы попасть в Python, wordsplitting уже сделано, неэкранированный пробельные была устранена и sys.argv является (в основном) список слов.

+0

Эскапирование будет: './myscript.py argument \ with \ whitespace' – Xevaquor

0

Вы должны использовать 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'] 
+0

Вы уверены, что strip() будет работать над списком? – Organis

+0

Я знаю, что 'strip()' - это метод 'str', поэтому я использую' sys.argv [1:] ' – ettanany

+0

sys.argv - это список, поэтому sys.argv [1:] - это фрагмент этого список. – Organis

Смежные вопросы