我是一个完整的Python新手,但我需要创建一个小脚本作为更大项目的一部分。
我试图使用一个小的Python脚本将变量输入到Unix文件中的一行代码中。我一直试图使用subprocess.call()
,这使我能够执行我需要赢得的命令,并允许我放入变量。
我一直在尝试以下方法:
import subprocess
var="some_variable"
subprocess.call(['sudo', 'sed', '-i', '-e' 's/line_to_replace.*/replacement_line' + var, /path/to/file.conf])
答案 0 :(得分:1)
这里最明显的失败是你的代码没有在替换值的末尾放置一个尾随/
以使其成为有效的sed
命令:
import subprocess
var="some_variable".replace('/', r'\/') # backslash-escape any sigil instances
subprocess.call(['sudo', 'sed', '-i',
'-e', 's/line_to_replace.*/replacement_line%s/' % (var,),
'/path/to/file.conf'])
那就是说,请注意,这不适用于POSIX-standard sed
(没有-i
)或BSD sed(sed -i
的扩展参数不是可选的)。用于就地编辑文件的POSIX标准工具是ed
和ex
;考虑学习它们。
答案 1 :(得分:0)
您的直接问题是sed
语法错误:您在替换字符串结束后缺少结束分隔符(并且需要引用文件名)。但是,大多数简单的Unix工具都可以很容易地用纯Python代替,通常可以在优雅和高效方面立即获得(避免外部流程通常会显着提高性能)。
import fileinput
for line in fileinput('/path/to/file', inline=True):
if line.startswith('line_to_replace'):
line = var + '\n'
print line
如果您真的需要正则表达式支持,那么更改应该是显而易见的。 sudo
更难以取代;如果获得对要操作的文件的写权限,则可以使用sudo
从提示符中简单地运行此命令。否则,这不是一件容易的事。