передать всю строку в качестве аргумента между python и bash - PullRequest
0 голосов
/ 01 июня 2019
cat /tmp/testme
#!/usr/bin/env  python3
import sys
print(sys.argv[0])
print(sys.argv[1])

Это просто, просто напечатать аргумент, переданный из bash в python.

x="i am a book"
/tmp/testme "i am a book"
/tmp/testme
i am a book

Строка i am a book может быть передана в программу python как целая строка.

/tmp/testme  ${x}
/tmp/testme
i
echo ${x}
i am a book

Почему python не может иметь дело с $ {x} i am a book в целом, он получает в качестве аргумента только первый символ в строке.

1 Ответ

1 голос
/ 01 июня 2019

Когда вы выполните строку /tmp/testme ${x}, bash расширит содержимое x и в конечном итоге выполнит /tmp/testme i am a book.Следовательно, sys.argv станет ['/tmp/testme', 'i', 'am', 'a', 'book'].

. Для достижения желаемого поведения следует указывать ${x}, например "${x}".Затем bash выполнит /tmp/testme 'i am a book'.

Вот пример со сценарием bash.При set -x bash будет печатать команды и их аргументы по мере их выполнения после оценки всех переменных.

$ cat testme
#!/usr/bin/env python3
import sys
print(sys.argv)

$ cat exampleBashScript.sh 
#!/usr/bin/env bash
set -x

x="i am a book"
./testme ${x}
./testme "${x}"

$ ./exampleBashScript.sh 
+ x='i am a book'
+ ./testme i am a book
['./testme', 'i', 'am', 'a', 'book']
+ ./testme 'i am a book'
['./testme', 'i am a book']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...