2017-05-05 288 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。