【问题标题】:ssh works in terminal but not through Pythonssh 在终端中工作,但不能通过 Python
【发布时间】:2020-02-17 17:52:11
【问题描述】:

我正在尝试使用 Python 脚本通过 ssh 将数据写入远程机器上的磁盘。但是它给出了dd: /dev/xbd2d: Device not configured.的错误

import argparse
import os
import time

parser = argparse.ArgumentParser(description='basis')
parser.add_argument("-g", default=1, help="")
args = parser.parse_args()
volume = args.g
instance_ip=10.1.12.3
cmd_ssh='ssh -tt -i basis.pem root@'+instance_ip+ ''' "date | dd of=/dev/xbd2d"'''
os.system(cmd_ssh)

比较不寻常的是,如果使用命令:

ssh -tt -i basis.pem root@10.1.12.3 "date | dd of=/dev/xbd2d"

在终端中,它可以正确执行而没有任何问题,并将数据写入磁盘。我用 C++ 编写了相同的脚本,它运行良好,但由于某种原因 Python 给了我dd: /dev/xbd2d: Device not configured.

【问题讨论】:

  • 大概instance_ip 应该是一个字符串(因为它是一个语法错误)。您是否也尝试过使用subprocess.Popen 而不是os.system。如果需要,使用shell=True。
  • 好的@Eran,我没有尝试过subprocess.Popen,所以我会马上做。但我确实尝试了标准的 Popen,它也给出了错误
  • 仍然遇到与 subprocess.Popen @Eran 相同的错误
  • 正如@Eran 所说,由于IP 地址周围缺少引号,您显示的代码可能无法运行。请确保您发布的代码是可运行的并且实际演示了问题。

标签: python ssh


【解决方案1】:

检查变量周围的引号并使用 \" 代替三引号解决了我的问题,如 Eran 建议的那样

import argparse
import os
import time

parser = argparse.ArgumentParser(description='basis')
parser.add_argument("-g", default=1, help="")
args = parser.parse_args()
volume = args.g
instance_ip=10.1.12.3
cmd_ssh="ssh -tt -i basis.pem root@"+str(instance_ip)+" \"date | dd of=/dev/xbd2d\""
os.system(cmd_ssh)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多