Подстановка оболочки в подпроцесс - PullRequest
0 голосов
/ 11 января 2019

Может ли кто-нибудь указать правильный способ замены оболочки с помощью модуля подпроцесса. В качестве тривиального примера рассмотрим приведенный ниже случай

result = subprocess.check_output(['ls', '-l', '/tmp/`date +"%Y-%m-%d"`'], shell=True)

Перечисленные ниже варианты были опробованы безуспешно

result = subprocess.check_output(['ls', '-l', '/tmp/$(date +"%Y-%m-%d")'], shell=True)
    result = subprocess.check_output(['ls', '-l', '/tmp/date +"%Y-%m-%d"'], shell=True)

Кроме того, будет подпроцесс.Popen - лучший способ сделать это, а не check_output.

1 Ответ

0 голосов
/ 11 января 2019

Замена оболочки происходит только в оболочках, а вы ее не запускаете. Нет никакого способа процитировать это, чтобы заставить это работать.

Вместо этого выполняйте работу оболочки самостоятельно:

import subprocess
date = subprocess.check_output(['date', '+%Y-%m-%d']).rstrip("\n")
result = subprocess.check_output(['ls', '-l', '/tmp/' + date])
print(result)

Кроме того, вы можете запустить команду в оболочке. Это требует меньше размышлений, но более хрупко:

result = subprocess.check_output('ls -l /tmp/$(date +"%Y-%m-%d")', shell=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...