2017-05-05 173 views
0

我使用paramiko.SSHClient.exec_command()在远程服务器上运行命令。 有人知道是否有可能改变宽度,就像使用invoke_shell(width = 150)一样?增加paramiko.SSHClient.exec_command()宽度

当我exec_command("ls -la")我得到:

drwx------. 6 myuser myuser 4096 25 avril 15:59 
. 
drwxr-xr-x. 14 root root  4096 5 mai 15:05 
.. 
-rw-------. 1 myuser myuser 2818 28 avril 11:09 
.bash_history 
-rw-r--r--. 1 myuser myuser 340 14 avril 14:16 
.bashrc 

,我想:

drwx------. 6 myuser myuser 4096 25 avril 15:59 . 
drwxr-xr-x. 14 root root  4096 5 mai 15:05 .. 
-rw-------. 1 myuser myuser 2818 28 avril 11:09 .bash_history 
-rw-r--r--. 1 myuser myuser 340 14 avril 14:16 .bashrc 

(使用exec_command,不invoke_shell)

我的代码:

ssh_client = paramiko.SSHClient() 
mykey   = paramiko.RSAKey.from_private_key_file("/path/to/my/key", password="passphrase") 
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_client.connect("myserver.mydomain.com", username="myuser", pkey=mykey) 
transport  = ssh_client.get_transport() 
agent_channel = transport.open_session() 
agent_handler = paramiko.agent.AgentRequestHandler(agent_channel) 
stdin, stdout, stderr = ssh_client.exec_command("ls -la") 
+0

我相信这可以通过远程服务器上的配置完成。那对你有用吗?你在运行什么操作系统? – sytech

+0

那么,从我的linux外壳,如果我执行'ssh [email protected]“ls -la”'我得到我想要的行不分裂。我想这不是一个服务器配置的事情。我在CentOS7上运行我的python代码。 –

+0

我无法复制该问题。有了'exec_command',你不会建立一个'pty'终端,也许这与它有关。你可以尝试从'exec_command'和普通的'ssh'会话运行'env',看看环境变量是如何不同的。 – tdelaney

回答

0

好,找到了它:这只是一个奇怪的行为。我把收到的行放在一个列表中,然后pprint这个列表。如果我这样做:

for line in received: 
    print(line) 

然后就可以了。 pprint printed:

['-rw-r----- 1 myuser mygroup  23228063744 06 mai 11:41 ' 
'my_file.txt-rw-r----- 1 ' 
... 

我不知道为什么。那么,我会停止使用pprint。