GVKun编程网logo

使用Python Paramiko执行命令后,如何保存结果?(python执行结果保存到文件)

22

针对使用PythonParamiko执行命令后,如何保存结果?和python执行结果保存到文件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展django中使用paramiko远程执行命令、

针对使用Python Paramiko执行命令后,如何保存结果?python执行结果保存到文件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展django中使用paramiko远程执行命令、Drush命令没有使用Paramiko执行、Python 2.x 中如何使用paramiko模块进行SSH客户端编程、Python 3.x 中如何使用paramiko模块进行SSH客户端编程等相关知识,希望可以帮助到你。

本文目录一览:

使用Python Paramiko执行命令后,如何保存结果?(python执行结果保存到文件)

使用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远程执行命令

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执行

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客户端编程

Python 2.x 中如何使用paramiko模块进行SSH客户端编程

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客户端编程

Python 3.x 中如何使用paramiko模块进行SSH客户端编程

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客户端编程的相关信息,请在本站寻找。

本文标签: