Python вызывает сценарий оболочки - нет каталога? - PullRequest
0 голосов
/ 15 мая 2011

В скрипте Python я вызываю скрипт bash следующим образом:

subprocess.Popen(["./scan.sh", dir])

Внутри этого скрипта есть,

find $1 -name "*013*.txt" > found_files.txt

По какой-то причине аргумент dir из python переведен в версию с кавычками внутри скрипта bash. Печать 'dir' в python дает точный путь, как его набрал пользователь:

~/Desktop/Files

однако, поиск завершается неудачно с

find: '~/Desktop/Files' no such directory

Запуск scan.sh вручную с ~ / Desktop / Files, так как аргумент работает нормально. Почему цитаты ставятся вокруг него ...?

Ответы [ 2 ]

8 голосов
/ 15 мая 2011

Нет.То, что происходит, - то, что ~ не интерпретируется, поскольку работа оболочки делает это.Используйте os.path.expanduser(), чтобы расширить путь перед передачей его в subprocess.

0 голосов
/ 15 мая 2011

используйте $ HOME. '~' не расширяется ни в кавычках, ни в двойных кавычках.

python -c "import subprocess;subprocess.Popen(['./scan.sh', '~'])"
python -c "import subprocess;subprocess.Popen(['./scan.sh', '$HOME'])"

мой файл scan.sh содержит:

#!/bin/sh
echo =$1=

Первый отпечаток =~=, второй =/Users/jomo=.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...