我不知道你的命令出了什么问题。无论如何,使用subprocess.call()函数肯定会更好。假设我们有文件:
$ cat test.txt
abc
def
现在,如果我执行以下程序:
import subprocess
oldstr = 'a'
newstr = 'AAA'
path = 'test.txt'
subprocess.call(['sed', '-i', 's/'+oldstr+'/'+newstr+'/', path])
我们得到这个:
$ cat test.txt
AAAbc
def
此外,如果你的oldstr
/里面newstr
有一些斜线 ( /
),你的命令也会中断。我们可以通过用转义的斜杠替换斜杠来解决它:
>>> print 'my/string'.replace('/', '\\/')
my\/string
所以,如果你有这个文件:
$ cat test.txt
this is a line and/or a test
this is also a line and/or a test
并且您想替换and/or
,只需在变量中相应地替换斜杠:
import subprocess
oldstr = 'and/or'
newstr = 'AND'
path = 'test.txt'
subprocess.call(['sed', '-i', 's/'+oldstr.replace('/', '\\/')+'/'+newstr.replace('/', '\\/')+'/', path])
当然,它可以更具可读性:
import subprocess
oldstr = 'and/or'
newstr = 'AND'
path = 'test.txt'
sedcmd = 's/%s/%s/' % (oldstr.replace('/', '\\/'), newstr.replace('/', '\\/'))
subprocess.call(['sed', '-i', sedcmd, path])