Не в состоянии выполнить команду bash на python с подпроцессом и sed - PullRequest
0 голосов
/ 08 октября 2019

Моя цель - выполнить следующую команду bash в Python и сохранить ее вывод:

echo 'sudo ./run_script.sh -dates  \\{\\'2017-11-16\\',\\'2017-11-29\\'\\}'|sed 's;\\\\;\\;'

Когда я запускаю эту команду в bash, вывод будет: sudo ./run_script.sh -dates \{\'2019-10-05\',\'2019-10-04\'\}

MyПервоначальная идея состояла в том, чтобы заменить двойной обратный слеш на один обратный слеш в Python. Как это ни смешно, я не мог сделать это в Python (только при использовании print() вывод такой, как хотелось бы, но я не могу сохранить вывод print(), а str () не конвертирует \ вПоэтому я решил сделать это в bash.

import subprocess

t= 'some \\ here'

cmd = "echo \'"+ t+"\'|sed 's;\\\\;\\;'"
ps = subprocess.run(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)

ps.stdout
Out[6]: b"sed: -e expression #1, char 7: unterminated `s' command\n"

Запуск Python 3.6.8 в Ubuntu 18

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Перечитав ваш вопрос, я вроде понял, что вы хотели.

a = r'some \here'
print(a) #some \here

Опять необработанные строковые литералы ...

1 голос
/ 08 октября 2019

Попробуйте вместо этого использовать subprocess.check_output. Вы также забываете дополнительную обратную косую черту для каждой обратной косой черты в вашей команде.

import subprocess

command = "echo 'some \\\\here'|sed 's;\\\\\\\\;\\\\;'"
output = subprocess.check_output(command, shell=True).decode()
print(output) # prints your expect result "some \here"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...