Python 使用sed pass变量调用subprocess.call

Python 使用sed pass变量调用subprocess.call,python,sed,subprocess,Python,Sed,Subprocess,我正在尝试使用子流程运行Python脚本。调用在匹配模式后添加一行。方法如下: addline1是变量,其值为“hello world1” filename1是包含路径和文件名的变量,例如“/tmp/path1/filename.conf” 在filename.conf中,它有35行,我想在匹配字符串“ReWriteEngine On” 它失败了,但有以下例外: **sed: -e expression #1, char 16: expected \ after `a', `c' or `i'*

我正在尝试使用
子流程运行Python脚本。调用
在匹配模式后添加一行。方法如下:

addline1
是变量,其值为“hello world1”

filename1
是包含路径和文件名的变量,例如
“/tmp/path1/filename.conf”

filename.conf
中,它有35行,我想在匹配字符串
“ReWriteEngine On”

它失败了,但有以下例外:

**sed: -e expression #1, char 16: expected \ after `a', `c' or `i'**
请任何人提出修改意见好吗


使用fileinput而不是sed尝试代码

import fileinput
processing_foo1s = False
for line in fileinput.input('/tmp/filename1/mod_wl_ohs.conf', inplace=1):
    if line.startswith("RewriteEngine On"):
        processing_foo1s = True
    else:
        if processing_foo1s:
            print 'foo bar'
            processing_foo1s = False
            print line

纠正
sed
问题:

sed_cmd = '/ReWriteEngine On/a' + addline1
subprocess.call(['sed', '-i', sed_cmd, filename1])
注意:如果字符串必须在行首匹配,请使用
/^ReWriteEngine On/a


使用
fileinput

import fileinput
for line in fileinput.input(filename1, inplace=1):
    print line,
    if line.startswith("ReWriteEngine On"):
        print 'foo bar'

参考资料:

纠正
sed
问题:

sed_cmd = '/ReWriteEngine On/a' + addline1
subprocess.call(['sed', '-i', sed_cmd, filename1])
注意:如果字符串必须在行首匹配,请使用
/^ReWriteEngine On/a


使用
fileinput

import fileinput
for line in fileinput.input(filename1, inplace=1):
    print line,
    if line.startswith("ReWriteEngine On"):
        print 'foo bar'

参考资料:

为什么不使用python本身?使用python本身?你能详细说明一下吗?你的意思是使用os.system调用吗?我甚至在python本身中尝试过这种方法,但这无助于添加新字符串:对于fileinput.input('/tmp/filename1/mod_wl_ohs.conf',inplace=1)中的行,import fileinput processing\u foo1s=False:if line.startswith(“RewriteEngine On”):processing\u foo1s=True其他:如果processing\u foo1s:print'foo bar'processing\u foo1s=False打印行,关于
sed
问题,可以通过构造字符串并传递给子流程来解决。。例如:
sed_cmd='/ReWriteEngine On/a'+addline1
subprocess.call(['sed','-i',sed_cmd,filename1])
当然-让我试试看。为什么不全部用python本身来做呢?用python本身?你能详细说明一下吗?你的意思是使用os.system调用吗?我甚至在python本身中尝试过这种方法,但这无助于添加新字符串:对于fileinput.input('/tmp/filename1/mod_wl_ohs.conf',inplace=1)中的行,import fileinput processing\u foo1s=False:if line.startswith(“RewriteEngine On”):processing\u foo1s=True其他:如果processing\u foo1s:print'foo bar'processing\u foo1s=False打印行,关于
sed
问题,可以通过构造字符串并传递给子流程来解决。。例如:
sed_cmd='/ReWriteEngine On/a'+addline1
subprocess.call(['sed','-i',sed_cmd,filename1])
当然-让我试试看。