我正在尝试从 Windows 主机在远程 Linux 机器上执行一些脚本。我希望使用 python subprocess +putty/plink 来实现这一点。 当我从 Windows cmd 尝试 Putty 或 plink 命令时,它工作正常。但是如果我使用 python 子进程尝试相同的命令,我会收到很多错误。
C:\Users\username>plink.exe username@machinename -pw password
工作正常。但是当我从 python 尝试时,
process = subprocess.Popen('plink.exe username@machinename -pw password'.split(),
env={'PATH':'C:\\Program Files (x86)\\PuTTY\\'},
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
抛出以下错误。
Unable to open connection:
gethostbyname: unknown error'
process = subprocess.Popen("putty.exe -ssh -2 -l username -pw password -m C:\\script.sh machinename",
env={'PATH':'C:\\Program Files (x86)\\PuTTY\\'},
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
,shell=True);
Unable to open connection:
gethostbyname: unknown error'
我也尝试过 subprocess.check_ouput,但没有成功。
output = subprocess.check_output("putty.exe -ssh -2 -l username -pw password -m C:\\script.sh machinename", stderr=subprocess.STDOUT,shell=True)
抛出以下错误
CalledProcessError: Command 'putty.exe -ssh -2 -l username -pw password -m C:\script.sh machinename' returned non-zero exit status 1
这可能是防火墙问题吗?
最佳答案
我强烈建议不要使用 PuTT 或一般的每个外部程序来连接到 shh 然后与管道接口(interface)。
使用 python 库 paramiko这可以做得更好。
例如:
# ... connect like one of the examples on github
stdin, stdout, stderr = client.exec_command('ls')
for line in stdout:
print '... ' + line.strip('\n')
关于python - 使用 PuTTY 或 plink 通过 python 子进程连接到远程 linux 机器会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768508/