使用python subprocess.Popen的僵尸SSH进程

Codenaugh

我有一个脚本,该脚本使用2台不同的机器运行测试用例。测试需要在机器1上运行某些命令,然后在机器2上运行命令,然后机器1将数据发送到机器2。目标是能够从任一机器上运行测试,所以我认为我将SSH到机器1和在此处执行命令,然后SSH到计算机2并在此处执行命令...我试图避免使用paramiko,因为我不希望额外的依赖关系,所以我发现这段漂亮的代码可以完成这项工作:

def executeRemoteCommand(host, command):
  ssh = subprocess.Popen(["ssh", "%s" % host, command],
                         shell=False,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)

这是我在做什么的一个例子:

executeRemoteCommand(user@machine1, "cd /dcd-netapp1/test/test-priority_v6; ./prerun")
time.sleep(30)  
executeRemoteCommand(user@machine2, "cd /dcd-netapp1/test/test-priority-v6; ./run")
time.sleep(1800)
executeRemoteCommand(user@machine1, "cd /dcd-netapp1/test/test-priority-v6; ./postrun")
executeRemoteCommand(user@machine2, "cd /dcd-netapp1/test/test-priority-v6; ./graph_results")

问题是我的prerunssh会话没有被杀死。postrun脚本负责终止以该prerun脚本启动的日志记录脚本,但是就像我说的那样,当我查看所有正在运行的进程时,在测试结束后ssh会话会很好地显示ps -ef | grep ssh

有关其他信息,我曾经在executeRemoteCommand函数中包含以下代码

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

我将其注释掉,因为prerun脚本将挂起,等待std输出放入结果。这永远不会发生。我的prerun脚本确实具有std输出,但是我认为它无法收集,因为它可能是一种守护进程?我对prerun脚本不是很了解

Codenaugh

删除管道对我的情况有效。现在,我从开始测试的计算机上的远程计算机获得所有输出,一切正常关闭。顺便说一句,我发现shell=False默认情况下它是假的,因此它是不必要的,%s % host字符串替换也是如此这是关于我的确切问题的样子:

def executeRemoteCommand(host, command):
  ssh = subprocess.Popen(["ssh", host, command])

由于该函数现在已被超级简化,因此我走了一步,认为如果完全放弃该函数并Popen直接使用它,则该测试更易于阅读

subprocess.Popen(["ssh", user@machine1, "cd /dcd-netapp1/test/test-priority-v6; ./prerun"])
time.sleep(5)
subprocess.Popen(["ssh", user@machine2, "cd /dcd-netapp1/test/test-priority-v6; ./run"])
time.sleep(1800)
subprocess.Popen(["ssh", user@machine1, "cd /dcd-netapp1/test/test-priority-v6; ./postrun"])
subprocess.Popen(["ssh", user@machine1, "cd /dcd-netapp1/test/test-priority-v6; ./graph_results"])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python-使用subprocess.Popen杀死挂起的进程

来自分类Dev

ssh与Subprocess.popen

来自分类Dev

ssh与Subprocess.popen

来自分类Dev

正确使用subprocess.Popen通过SSH发出命令

来自分类Dev

SSH使用subprocess.popen,无法输入密码

来自分类Dev

SSH使用subprocess.popen,无法输入密码

来自分类Dev

正确使用subprocess.Popen通过SSH发出命令

来自分类Dev

如何使用subprocess.popen

来自分类Dev

Python使用subprocess.Popen关闭所有线程或进程

来自分类Dev

在Python 2.5中使用subprocess.Popen访问子进程创建的文件描述符

来自分类Dev

Python使用subprocess.Popen关闭所有线程或进程

来自分类Dev

在Python中使用subprocess.Popen执行shell脚本?

来自分类Dev

在AWS Lambda中使用python subprocess.popen

来自分类Dev

Python:使用subprocess.call而不是Popen获取输出

来自分类Dev

Python subprocess.Popen:使用“>”重定向不起作用

来自分类Dev

使用python subprocess.Popen调用Matlab函数

来自分类Dev

python subprocess.Popen(shell = True)创建的进程的pid不是生成的shell的pid

来自分类Dev

Python subprocess.popen()无需等待

来自分类Dev

Python subprocess.Popen()等待完成

来自分类Dev

Redirecting stdout to stderr in Python's subprocess/Popen

来自分类Dev

Python Subprocess.Popen和rdesktop

来自分类Dev

Python Subprocess.Popen属性错误?

来自分类Dev

Python subprocess.popen错误的pid

来自分类Dev

subprocess.Popen中的Python重定向

来自分类Dev

Python - subprocess.Popen 不返回输出

来自分类Dev

在subprocess.Popen命令中使用变量

来自分类Dev

在 subprocess.Popen 中使用通配符

来自分类Dev

使用Python subprocess.call()启动ncurses进程

来自分类Dev

Python:subprocess.Popen()。communicate()将SSH命令的输出打印到stdout,而不是返回输出

Related 相关文章

  1. 1

    Python-使用subprocess.Popen杀死挂起的进程

  2. 2

    ssh与Subprocess.popen

  3. 3

    ssh与Subprocess.popen

  4. 4

    正确使用subprocess.Popen通过SSH发出命令

  5. 5

    SSH使用subprocess.popen,无法输入密码

  6. 6

    SSH使用subprocess.popen,无法输入密码

  7. 7

    正确使用subprocess.Popen通过SSH发出命令

  8. 8

    如何使用subprocess.popen

  9. 9

    Python使用subprocess.Popen关闭所有线程或进程

  10. 10

    在Python 2.5中使用subprocess.Popen访问子进程创建的文件描述符

  11. 11

    Python使用subprocess.Popen关闭所有线程或进程

  12. 12

    在Python中使用subprocess.Popen执行shell脚本?

  13. 13

    在AWS Lambda中使用python subprocess.popen

  14. 14

    Python:使用subprocess.call而不是Popen获取输出

  15. 15

    Python subprocess.Popen:使用“>”重定向不起作用

  16. 16

    使用python subprocess.Popen调用Matlab函数

  17. 17

    python subprocess.Popen(shell = True)创建的进程的pid不是生成的shell的pid

  18. 18

    Python subprocess.popen()无需等待

  19. 19

    Python subprocess.Popen()等待完成

  20. 20

    Redirecting stdout to stderr in Python's subprocess/Popen

  21. 21

    Python Subprocess.Popen和rdesktop

  22. 22

    Python Subprocess.Popen属性错误?

  23. 23

    Python subprocess.popen错误的pid

  24. 24

    subprocess.Popen中的Python重定向

  25. 25

    Python - subprocess.Popen 不返回输出

  26. 26

    在subprocess.Popen命令中使用变量

  27. 27

    在 subprocess.Popen 中使用通配符

  28. 28

    使用Python subprocess.call()启动ncurses进程

  29. 29

    Python:subprocess.Popen()。communicate()将SSH命令的输出打印到stdout,而不是返回输出

热门标签

归档