Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在后台执行远程命令并获取pid的Python脚本_Python_Subprocess - Fatal编程技术网

在后台执行远程命令并获取pid的Python脚本

在后台执行远程命令并获取pid的Python脚本,python,subprocess,Python,Subprocess,我已经尝试使用subprocess和sshpass来执行远程命令。下面是我使用子流程执行远程命令的代码 import subprocess import sys HOST="192.168.20.175" COMMAND="cat /proc/meminfo | grep MemTotal" ssh = subprocess.Popen(["sshpass", "-p", "unlock123", "ssh", "%s" % HOST, COM

我已经尝试使用subprocess和sshpass来执行远程命令。下面是我使用子流程执行远程命令的代码

import subprocess
import sys

HOST="192.168.20.175"
COMMAND="cat /proc/meminfo | grep MemTotal"

ssh = subprocess.Popen(["sshpass", "-p", "unlock123",
                        "ssh", "%s" % HOST, COMMAND],
                        shell=False,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)
result = ssh.stdout.readlines()

if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
else:
    print result

print "Return Code - %s" % ssh.returncode
但是,

  • returncode返回None
  • 现在我想在远程机器上运行以下循环命令
  • “echo”;虽然真实;dops-p1820-o%cpu,%mem | grep-vcpu>>/tmp/proc_out.log

  • 我想在远程机器上启动命令,不想等待命令完成
  • 一旦命令被激发,获取命令的pid
  • 必要时,在一段时间后终止进程

  • 有什么可能的解决方案吗?

    bash比python更多。你有没有想过把它转换成bash脚本?如果你想坚持使用python,那么其中一个解决方案就是fabric,它专门做这类事情。注意:使用
    pty=False
    来运行后台作业。无关:如果子进程在stderr上生成足够的输出,那么它将挂起——您应该同时从两个流(threads或async.io)中读取以避免它(文档中有5条关于它的警告!)。如果您想要非无
    p.returncode
    ,请调用
    out,err=p.communicate()
    rc=p.wait()
    p.poll()
    ),您还需要了解运行后台作业时要做什么。什么是会话,进程组,用来杀死整个进程树。