簡體   English   中英

使用Python子進程使用ssh的多個命令

[英]Multiple commands with ssh using Python subprocess

我需要使用subprocess模塊在ssh會話中執行多個shell命令。 我可以一次執行一個命令:

   subprocess.Popen(["ssh",  "-o UserKnownHostsFile=/dev/null", "-o StrictHostKeyChecking=no", "%s" % <HOST>, <command>])

但是有沒有辦法在ssh會話中使用subprocess執行多個shell命令? 如果可能的話,我不想使用包。

非常感謝你!

嚴格來說,無論您在遠程服務器上執行多少命令,您只能使用Popen執行一個命令。 那個命令是ssh

要在遠程服務器上執行多個命令,只需在command字符串中分隔; S:

commands = ["echo 'hi'",  "echo 'another command'"]
subprocess.Popen([
    "ssh",
    "-o UserKnownHostsFile=/dev/null",
    "-o StrictHostKeyChecking=no",
    ";".join(commands)
])

您也可以在&&上加入命令,如果您希望每個命令僅在前一個命令成功時執行。

如果您有許多命令並且您擔心可能超出命令行限制 ,則可以使用遠程服務器上的-s選項執行sh (或bash),這將在您發送時逐個執行命令:

p = subprocess.Popen([
    "ssh",
    "-o UserKnownHostsFile=/dev/null",
    "-o StrictHostKeyChecking=no",
    "sh -s",
], stdin=subprocess.PIPE)

for command in commands:
    p.stdin.write(command)
    p.stdin.write("\n")
    p.flush()

p.communicate()

請注意,在Python3中,您需要將命令編碼為字節字符串( command.encode("utf8") ),然后再將其寫入subprocess進程的stdin

我覺得這對於大多數簡單的情況來說都是過度的,盡管最初的建議是最簡單的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM