其他帖子涉及该主题,但是我仍然不清楚为什么它起作用:
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] 删除。
我来说两句