针对使用PythonParamiko执行命令后,如何保存结果?和python执行结果保存到文件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展django中使用paramiko远程执行命令、
针对使用Python Paramiko执行命令后,如何保存结果?和python执行结果保存到文件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展django中使用paramiko远程执行命令、Drush命令没有使用Paramiko执行、Python 2.x 中如何使用paramiko模块进行SSH客户端编程、Python 3.x 中如何使用paramiko模块进行SSH客户端编程等相关知识,希望可以帮助到你。
本文目录一览:- 使用Python Paramiko执行命令后,如何保存结果?(python执行结果保存到文件)
- django中使用paramiko远程执行命令
- Drush命令没有使用Paramiko执行
- Python 2.x 中如何使用paramiko模块进行SSH客户端编程
- Python 3.x 中如何使用paramiko模块进行SSH客户端编程
使用Python Paramiko执行命令后,如何保存结果?(python执行结果保存到文件)
如下所示,是否可以保存结果?原因是,在第二和第三stdout.read()处我无法达到结果。
import paramikoimport osdssh = paramiko.SSHClient()dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())dssh.connect(''192.168.1.250'', username=''root'', password=''pass'')import osstdin, stdout, stderr = dssh.exec_command(''ifconfig'')print stdout.read()print (''Sleeping 2 seconds!'')os.system(''sleep 2'')stdin, stdout, stderr = dssh.exec_command(''ls -l'')print stdout.read()print stdout.read()print stdout.read()dssh.close()
答案1
小编典典想象这stdout
是一个普通文件。如果您file.read()
第二次打电话,您希望得到什么?-除非文件已在外部更改,否则为空(空字符串)。
保存字符串:
output = stdout.read()
您可能会发现Fabric更易于使用(它用于paramiko
在后台执行命令)。
django中使用paramiko远程执行命令
<!--继承index.html-->
{% extends "index.html" %}
{% block page_css %}
{% endblock %}
<!--填充导航栏的页面名称-->
{% block page_title %}
执行脚本
{% endblock %}
<!--放置主页面内容-->
{% block container %}
{% load staticfiles %}
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
$(function () {
$(''#backup_all'').click(function () {
var socket = new WebSocket("ws://" + window.location.host + "/app01/echo_once/");
socket.onopen = function () {
console.log(''WebSocket open'');//成功连接上Websocket
socket.send($(''#backup_all'').val());//发送数据到服务端
};
socket.onmessage = function (e) {
console.log(''message: '' + e.data);//打印服务端返回的数据
$(''#messagecontainer'').prepend(''<p><pre>'' + e.data + ''</pre></p>'');
$(''#messagecontainer'').prepend(''<hr />'');
};
});
});
</script>
</head>
<body>
<br>
<!-- <button type="button" id="connect_websocket">连接 websocket</button> -->
<buttontype="button" id="backup_all" value="backup_all">
执行脚本
</button>
<h3>脚本执行结果:</h3>
<div id="messagecontainer">
</div>
<hr/>
{% endblock %}
views中的配置:
def exec_command(comm):
hostname = smart_str(''192.168.1.195'')
username = smart_str(''xxxxxx'')
password = smart_str(''******'')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname, username=username, password=password,allow_agent=False,look_for_keys=False)
stdin, stdout, stderr = ssh.exec_command(comm)
result = stdout.read()
ssh.close()
return result
@accept_websocket
def echo_once(request):
if not request.is_websocket():
print "这里实现wbsocket连接逻辑"
try:
message = request.GET[''message'']
return HttpResponse(message)
except:
return render(request, ''test3.html'')
else:
for message in request.websocket:
message = message.decode(''utf-8'')
if message == ''backup_all'':
command = ''sh test2.sh''
request.websocket.send(exec_command(command))
else:
request.websocket.send(''小样儿,没权限!!!''.encode(''utf-8''))
# @accept_websocket
# def echo(request):
# if request.is_websocket:#如果是webvsocket
# lock = threading.RLock() #rlock线程锁
# try:
# lock.acquire()#抢占资源
# clients.append(request.websocket)#把websocket加入到clients
# print(clients)
# for message in request.websocket:
# if not message:
# break
# for client in clients:
# client.send(message)
# finally:
# clients.remove(request.websocket)
# lock.release()#释放锁
文档:http://www.cnblogs.com/huguodong/p/6611602.html
Drush命令没有使用Paramiko执行
我已经按照这里的步骤http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely-different/
用Python通过ssh连接到我的服务器。 我可以连接好,发送命令。
但是,当我运行stderr.readlines()时,即使该命令似乎已经正确执行,它也会显示每次下面的错误消息。 我closures了连接并重新启动了Python,结果仍然相同。
这是一个Python示例:
Drupal 7在“第一次加载”上太慢
每次服务器重新启动后MysqL都会损坏
如何在Nginx上安装PHP扩展?
Nginx的configuration:如何使用auth_basicauthentication如果ssl_client_certificate没有提供?
Drupal 7重写不使用.htaccess
>>> stdin,stdout,stderr = myssh.exec_command("xyz") >>> stderr.readlines() ['which: no PHP in (/usr/bin:/bin:/usr/sbin:/sbin:/big/dom/mydomain/pear/drush)n','/big/dom/mydomain/pear/drush/drush: line 89: exec: : not foundn','bash: xyz: command not foundn']
我已经安装了drush,似乎工作正常。 如果我在服务器上input“哪个PHP”,我会告诉它在哪里,而不是上面的错误信息。 我发送了一些其他命令来有目的地得到一个错误消息,看看是否清除任何东西。 相反,它在最后加上了一些东西。
在错误消息之后,我去看了引用的drush文件。 这里是第89行:
exec "$PHP" $PHP_options "$SCRIPT_PATH" --PHP="$PHP" --PHP-options="$PHP_options" "$@"
我相信“which PHP”命令来自这个行上面块的$ PHPvariables
if [ ! -z "$Drush_PHP" ] ; then # Use the Drush_PHP environment variable if it is available. PHP="$Drush_PHP" else # Default to using the PHP that we find on the PATH. # Note that we need the full path to PHP here for Dreamhost,which behaves oddly. See http://drupal.org/node/662926 PHP=`which PHP` # We check for a command line (cli) version of PHP,and if found use that. which PHP-cli >/dev/null 2>&1 if [ "$?" = 0 ] ; then PHP=`which PHP-cli` fi # On MSYsgiT,we need to use "PHP",not the full path to PHP if [ ! -z "$MSYstem" ] && [ "x${MSYstem:0:5}" = "xMINGW" ] ; then PHP="PHP" fi fi
该文件的全文如下: http : //pastebin.com/29AXmHKF
如果我尝试执行任何drush命令,我会得到相同的错误。 但是,如果我直接使用python / paramiko直接login到服务器,drush命令就可以正常工作。
在本地主机上运行Drupal windows7 EasyPHP 64x
检查cookie并用Apacheredirect
干净的URL不工作,mod_rewrite模块安装
在drupal模块中使用补丁
Drupal + Nginx + php-cgi:502错误的网关错误
我必须理解的第一件事是在执行命令的时候$ PATH变量是什么。 我跑了
>>> stdin,stderr = myssh.exec_command("echo $PATH") >>> stderr.readlines()
并意识到我的$ PATH是不一样的,当我直接在服务器上运行echo $ PATH! 我只能猜测,打开通道并发送命令之后,在某个时间点附加路径会附加到$ PATH变量。
但是,$ PATH所包含的是我之前添加到我的home文件夹中的.bashrc文件的路径。 所以,我所要做的也是添加到那里的路径(即使我在服务器上运行“echo $ PATH”时,那里的路径)。
现在我没有得到错误信息,我可以执行drush命令。
我使用了Mike Ryan的解决方案(感谢Mike!),但在stdout中找到了信息,而不是stderr。
stdin,stderr = server.ssh_client.exec_command("echo $PATH") print stdout.readlines()
如果您以交互方式ssh到该服务器并运行xyz ,会发生什么情况?
您只有在实际阅读时才能阅读错误消息,而不是在发送命令时阅读。 (谢谢,船长。)
错误输出看起来非常像你的xyz是一个以#!which PHP开头的PHP脚本。 但是shell找不到任何PHP可执行文件。 这可能是由于在登录脚本中没有正确设置PATH 。 确保你知道当你SSH的时候运行哪个登录脚本(通常是~/.bash_profile和/或~/.profile而不是~/.bashrc )。
Python 2.x 中如何使用paramiko模块进行SSH客户端编程
概述:
paramiko是一个用于Python编程语言的SSHv2协议实现。它提供了一个高级别的API,使得编写SSH2协议的客户端和服务器端应用程序变得容易。在本文中,我们将学习如何使用paramiko模块在Python 2.x中编写SSH客户端应用程序。
安装paramiko:
在开始编写代码之前,首先需要安装paramiko模块。在命令行中执行以下命令来安装paramiko:
pip install paramiko
编写SSH客户端代码:
下面是一个简单的例子,演示了如何使用paramiko模块建立SSH连接,并执行一些基本的操作,如上传和下载文件:
import paramiko # 创建SSH客户端对象 client = paramiko.SSHClient() # 自动接受SSH远程主机的公钥 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接SSH服务器 client.connect(''your_ssh_server_ip_address'', port=22, username=''your_username'', password=''your_password'') # 执行命令 stdin, stdout, stderr = client.exec_command(''ls'') print(stdout.read()) # 上传文件 sftp = client.open_sftp() sftp.put(''local_file_path'', ''remote_file_path'') sftp.close() # 下载文件 sftp = client.open_sftp() sftp.get(''remote_file_path'', ''local_file_path'') sftp.close() # 关闭SSH连接 client.close()
在上面的代码中,我们首先创建了一个SSHClient对象。然后,设置了自动接受SSH远程主机的公钥。接下来,通过调用connect()方法连接到SSH服务器。在此之后,我们可以通过调用exec_command()方法执行命令,并通过调用open_sftp()方法上传和下载文件。最后,我们通过调用close()方法关闭SSH连接。
立即学习“Python免费学习笔记(深入)”;
需要注意的是,在使用exec_command()方法执行命令时,它会返回一个三元组stdin,stdout和stderr。通过调用read()方法可以获取命令的输出。
总结:
在本文中,我们介绍了如何使用paramiko模块在Python 2.x中编写SSH客户端应用程序。通过使用paramiko,我们可以轻松地连接到SSH服务器,并执行命令,上传和下载文件等操作。paramiko模块提供了一个方便的API,使得编写SSH客户端应用程序变得更加简单和高效。
参考链接:
- [paramiko官方网站](http://www.paramiko.org/)
以上就是Python 2.x 中如何使用paramiko模块进行SSH客户端编程的详细内容,更多请关注php中文网其它相关文章!
Python 3.x 中如何使用paramiko模块进行SSH客户端编程
概述:
SSH(Secure Shell)是一种网络协议,用于在不安全的网络连接上安全地运行shell会话。paramiko是一个Python模块,提供了SSH客户端和服务器的实现。本文将介绍如何在Python 3.x 中使用paramiko模块进行SSH客户端编程,以便于实现与远程服务器的连接和操作。
步骤一:安装paramiko模块
在开始之前,需要先安装paramiko模块。可以使用pip命令进行安装:
pip install paramiko
步骤二:导入paramiko模块
首先,需要导入paramiko模块以便于在Python代码中使用它。
import paramiko
步骤三:创建SSH客户端对象
接下来,需要创建一个SSH客户端对象。使用paramiko模块的SSHClient()方法来创建。
立即学习“Python免费学习笔记(深入)”;
client = paramiko.SSHClient()
步骤四:设置连接参数
在连接之前,需要设置连接参数,包括服务器地址、端口号、用户名和密码。可以使用客户端对象的set_missing_host_key_policy方法来设置服务器主机密钥验证的策略。这里使用AutoAddPolicy()策略,表示自动添加新的主机密钥。
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
步骤五:连接到远程服务器
使用客户端对象的connect方法来连接到远程服务器。
client.connect(''服务器地址'', port=端口号, username=''用户名'', password=''密码'')
步骤六:执行远程命令
连接成功后,可以使用客户端对象的exec_command方法执行远程命令。该方法返回一个三元组,包含了执行结果的标准输入、标准输出和标准错误。
stdin, stdout, stderr = client.exec_command(''要执行的远程命令'')
步骤七:处理执行结果
可以使用标准输出对象的read方法读取命令执行的结果,并使用decode方法将其转换为字符串。
output = stdout.read().decode(''utf-8'')
步骤八:关闭SSH连接
完成操作后,应该关闭SSH连接,以释放资源。
client.close()
示例代码:
以下是一个简单的示例代码,演示了如何使用paramiko模块进行SSH客户端编程。
import paramiko # 创建SSH客户端对象 client = paramiko.SSHClient() # 设置连接参数 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程服务器 client.connect(''服务器地址'', port=端口号, username=''用户名'', password=''密码'') # 执行远程命令 stdin, stdout, stderr = client.exec_command(''要执行的远程命令'') # 处理执行结果 output = stdout.read().decode(''utf-8'') print(output) # 关闭SSH连接 client.close()
总结:
本文介绍了如何使用paramiko模块进行SSH客户端编程。通过创建SSH客户端对象、设置连接参数、连接到远程服务器、执行远程命令以及关闭SSH连接等步骤,可以方便地实现与远程服务器的连接和操作。希望本文对你理解和使用paramiko模块有所帮助。
以上就是Python 3.x 中如何使用paramiko模块进行SSH客户端编程的详细内容,更多请关注php中文网其它相关文章!
关于使用Python Paramiko执行命令后,如何保存结果?和python执行结果保存到文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于django中使用paramiko远程执行命令、Drush命令没有使用Paramiko执行、Python 2.x 中如何使用paramiko模块进行SSH客户端编程、Python 3.x 中如何使用paramiko模块进行SSH客户端编程的相关信息,请在本站寻找。
本文标签: