[英]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.