简体   繁体   中英

Fail to run a bash command on python with subprocess and sed

My goal is to execute the following bash command in Python and store its output:

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

When I run this command in bash, the output is: sudo./run_script.sh -dates \{\'2019-10-05\',\'2019-10-04\'\}

My initial idea was to replace the double backslash by a single backslash in Python. As ridiculous as it seems, I couldn't do it in Python (only when using print() the output is as I would like but I can't store the output of print() and str() doesn't convert \ to. So I decided to do it in 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"

Running Python 3.6.8 on Ubuntu 18

Try using subprocess.check_output instead. You're also forgetting an extra backslash for every backslash in your command.

import subprocess

command = "echo 'some \\\\here'|sed 's;\\\\\\\\;\\\\;'"
output = subprocess.check_output(command, shell=True).decode()
print(output) # prints your expect result "some \here"

After re-reading your question I kinda understood what you wanted.

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

Again, raw string literals...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM