【发布时间】:2018-06-12 22:31:26
【问题描述】:
我有一个需要通过 SSH 执行的 sed 命令。我在 Python 中使用 Paramiko 到 SSH 进行编码。连接有效,sed 命令也有效。我的问题是当我尝试合并它们时:我需要将 sed 用作 sudo(sudo 命令有效,我已经用另一个命令对其进行了测试)。这是我所拥有的:
session.exec_command("sudo bash -c \"" + """sudo sed -i "s/\"hostname\":" *"\".*\"/\"hostname\":" *"\"adddvariable\"/" /home/frappe/frappe-bench/sites/test-dev.site1.local/site_config.json""" + "\"")
问题是当这个命令运行时,sed 被认为是“未完成”,我得到:
sed: -e 表达式 #1, char 11: 未终止的 `s' 命令
我认为这可能是由于 sed 命令中的空格造成的?我不知道如何解决这个问题。我是 Python、Paramiko 和 SSH 的新手。有人知道如何解决这个问题吗?
如果有帮助,这里是完整的代码:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
hostname=server_address,
username=server_username,
key_filename=server_key_file
)
session = ssh.get_transport().open_session()
session.set_combine_stderr(True)
session.get_pty()
session.exec_command("sudo bash -c \"" + """sudo sed -i "s/\"hostname\":" *"\".*\"/\"hostname\":" *"\"adddvariable\"/" /home/frappe/frappe-bench/sites/test-dev.site1.local/site_config.json""" + "\"")
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
stdin.flush()
frappe.msgprint(_(stdout.read().decode("utf-8"))) # same as print(stdout.read().decode("utf-8"))
【问题讨论】:
标签: python-2.7 ssh sed paramiko