我正在尝试向sed发送一个调用,但它似乎没有处理变量。当我打印它时,它看起来是正确的,但在调用中它不正确
#!/usr/bin/python -tt
import json
from pprint import pprint
from subprocess import call
with open('admin_list.json') as data_file:
admins = json.load(data_file)
#pprint(data[0]["key"])
for admin in admins:
#print(admin["name"])
#print (" sudo sed, 1 a ${"+admin['key']+"} /home/"+admin['name']+"/.ssh/authorized_keys")
call(["sudo sed", "1 a ${"+admin['key']+"} /home/"+admin['name']+"/.ssh/authorized_keys"])
OSError:错误2没有这样的文件或目录“
我已经更新了我的代码,没有收到错误,但是文件仍然没有更新
#!/usr/bin/python -tt
import json
import os
from pprint import pprint
from subprocess import call
with open('admin_list.json') as data_file:
admins = json.load(data_file)
#pprint(data[0]["key"])
for admin in admins:
call(["sudo","sed", "1 a "+admin['key']+"","/home/"+admin['name']+"/.ssh/authorized_keys"])
call(['cat','/home/'+admin["name"]+'/.ssh/authorized_keys'])
发布于 2018-07-10 04:01:18
你必须正确地分割你的参数,否则空格将被逐字解释。
这里有4个参数:
要解析为管理员的sed
并且不要依赖env。变量,事先评估它们(否则您将需要shell=True
)
因此,将一个包含4项的列表传递给call
call(["sudo","sed", "1 a "+os.getenv(admin['key']),"/home/"+admin['name']+"/.ssh/authorized_keys"])
请注意,要就地修改文件,您需要向sed
添加-i
选项
call(["sudo","sed", "-i", "1 a "+os.getenv(admin['key']),"/home/"+admin['name']+"/.ssh/authorized_keys"])
https://stackoverflow.com/questions/51253048
复制相似问题