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

亚诺

其他帖子涉及该主题,但是我仍然不清楚为什么它起作用:

command = "echo /sbin/poweroff | ssh admin@" + address
shutcmd = subprocess.Popen(command, stdout = subprocess.PIPE, shell=True)

这是行不通的:

 shutcmd = subprocess.Popen(["echo", "/sbin/poweroff" "|" "ssh", "admin@",address], stdout = subprocess.PIPE, stderr = subprocess.PIPE)

您将如何正确执行此操作?

詹姆斯·米尔斯

因为|是shell语法和语义。

您可以通过执行以下操作来模拟此操作:

from subprocess import Popen, PIPE, STDOUT

user = "root"
host = "1.2.3.4"

p = Popen(
    ["ssh", "{}@{}".format(user, host)],
    stdin=PIPE, stdout=PIPE, stderr=STDOUT
)
stdout, stderr = p.communicate("/sbin/poweroff\n")

但是,仅将命令本身作为参数传递给ssh

p = Popen(
    ["ssh", "{}@{}".format(user, host), "/sbin/poweroff"],
)
p.wait()

作为旁白; 您的第一个示例完全起作用的原因是由于shell=True需要一个外壳程序来运行您的“外壳程序”,因此产生的新外壳程序具有自己的stdin,stdout和stderr的fd三元组。这样echo | ssh的工作。

请参阅:管道(UNIX)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

使用Scala通过ssh远程发出命令时出现问题

来自分类Dev

在subprocess.Popen命令中使用变量

来自分类Dev

subprocess.Popen和执行ssh命令的问题

来自分类Dev

ssh与Subprocess.popen

来自分类Dev

ssh与Subprocess.popen

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

通过ssh在另一台机器上发出远程git命令时如何使用本地Github ssh密钥

来自分类Dev

如何通过SSH正确运行“ top”命令?

来自分类Dev

如何使用subprocess.popen

来自分类Dev

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

来自分类Dev

使用subprocess.Popen与os.popen执行命令“ ls -d * /”

来自分类Dev

似乎无法从subprocess.Popen获取正确的返回值

来自分类Dev

写入subprocess.Popen.stdin不能正确执行

来自分类Dev

通过SSH使用pipenv命令的问题

来自分类Dev

通过ssh命令调用使用git pull

来自分类Dev

sed命令无法通过SSH使用

来自分类Dev

无法通过SSH使用PowerShell命令

来自分类Dev

subprocess.Popen的命令行参数

来自分类Dev

在 subprocess.Popen 中使用通配符

来自分类Dev

通过ssh执行的命令未返回正确的返回码

来自分类Dev

在python 3.5中,当使用参数列表作为subprocess.Popen()的输入时,我无法获得正确的len(sys.argv)

来自分类Dev

为什么我不能使用 subprocess.Popen 与 SSH 交互?

来自分类Dev

从subprocess.Popen流传输并使用两个子命令时出现死锁

来自分类Dev

使用subprocess.Popen()和手动在shell中运行命令之间的区别?

来自分类Dev

如何在此处拆分命令以使用subprocess.Popen()

来自分类Dev

在Bamboo中通过SSH发出的nohup命令不会退出

Related 相关文章

  1. 1

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

  2. 2

    使用Scala通过ssh远程发出命令时出现问题

  3. 3

    在subprocess.Popen命令中使用变量

  4. 4

    subprocess.Popen和执行ssh命令的问题

  5. 5

    ssh与Subprocess.popen

  6. 6

    ssh与Subprocess.popen

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    通过ssh在另一台机器上发出远程git命令时如何使用本地Github ssh密钥

  11. 11

    如何通过SSH正确运行“ top”命令?

  12. 12

    如何使用subprocess.popen

  13. 13

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

  14. 14

    使用subprocess.Popen与os.popen执行命令“ ls -d * /”

  15. 15

    似乎无法从subprocess.Popen获取正确的返回值

  16. 16

    写入subprocess.Popen.stdin不能正确执行

  17. 17

    通过SSH使用pipenv命令的问题

  18. 18

    通过ssh命令调用使用git pull

  19. 19

    sed命令无法通过SSH使用

  20. 20

    无法通过SSH使用PowerShell命令

  21. 21

    subprocess.Popen的命令行参数

  22. 22

    在 subprocess.Popen 中使用通配符

  23. 23

    通过ssh执行的命令未返回正确的返回码

  24. 24

    在python 3.5中,当使用参数列表作为subprocess.Popen()的输入时,我无法获得正确的len(sys.argv)

  25. 25

    为什么我不能使用 subprocess.Popen 与 SSH 交互?

  26. 26

    从subprocess.Popen流传输并使用两个子命令时出现死锁

  27. 27

    使用subprocess.Popen()和手动在shell中运行命令之间的区别?

  28. 28

    如何在此处拆分命令以使用subprocess.Popen()

  29. 29

    在Bamboo中通过SSH发出的nohup命令不会退出

热门标签

归档