【发布时间】:2018-12-14 14:45:50
【问题描述】:
我正在使用 Paramiko 创建一个连接到我的远程计算机的 ssh,然后我调用 exec_command 来运行以下命令:
psql usera
通常exec_command 返回一个由stdin、stdout 和stderr 组成的元组。所以,我用stdin写CREATE DATABASE X,最后加上'\n'来模拟回车键。该命令需要很长时间,以至于看起来像是卡住了。
这是我的代码:
stdin, stdout, stderr = self.ssh.exec_command('psql usera')
print('executed')
print(stdin)
print(stdout)
print(stderr)
for err in stderr:
print(err)
for std in stdout:
print(std)
stdin.write('CREATE DATABASE ' + db_name + ';\n')
此代码将打印以下内容:
executed
<paramiko.ChannelFile from <paramiko.Channel 2 (open) window=2097152 -> <paramik
o.Transport at 0x36a29b0 (cipher aes128-ctr, 128 bits) (active; 3 open channel(s
))>>>
<paramiko.ChannelFile from <paramiko.Channel 2 (open) window=2097152 -> <paramik
o.Transport at 0x36a29b0 (cipher aes128-ctr, 128 bits) (active; 3 open channel(s
))>>>
<paramiko.ChannelFile from <paramiko.Channel 2 (open) window=2097152 -> <paramik
o.Transport at 0x36a29b0 (cipher aes128-ctr, 128 bits) (active; 3 open channel(s
))>>>
2018-12-12 19:22:39; DEBUG; EOF in transport thread
这意味着代码没有执行stdin.write()。这是启动命令和在提示符下启动命令的正确方法吗?
【问题讨论】:
-
@MartinPrikryl ,在 stdin, stdout, stderr = self.ssh.exec_command('psql usera') 之后卡住了
-
好吧:stdin,stdout,stderr = self.ssh.exec_command('psql usera') print('executed !') print(stdin) print(stdout) print(stderr) for err in stderr: self.logger.error(err) for std in stdout: print(std) print('ex') print('2') 将显示 => 已执行!
>> 3并发打印。 -
好的,完成了!
标签: python shell ssh psql paramiko