【发布时间】:2014-07-29 17:22:03
【问题描述】:
我正在使用 subprocess.Popen 来执行操作系统命令。这是我试图在我的代码中模拟的内容:
ssh -T myhost < /path/to/some/file
它可以像这样正常工作:
def runWorkerCode(filer, filename):
command = "/usr/bin/ssh -T " + filer + " < /devel/myscript"
try:
p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
out, _ = p.communicate()
except Exception:
print "Error: %s" % Exception
sys.exit(1)
return out.rstrip().split('\n')
但以下对 Popen 的调用不起作用:
p = subprocess.Popen(["/usr/bin/ssh", "-T", filer, "<", "/devel/myscript"], stdout=subprocess.PIPE, shell=True)
p = subprocess.Popen(["/usr/bin/ssh -T", filer, "< /devel/myscript"], stdout=subprocess.PIPE, shell=True)
我尝试了其他一些组合,但我可以开始工作的唯一方法是定义命令变量并仅将其提供给Popen()。我也试过shell=False。
第一种方法有效,但后一种方法对我来说似乎“更干净”。
为什么Popen 不允许我在列表中指定参数?
【问题讨论】:
-
这将在 Linux 和 Solaris(sparc 和 x86)主机上运行。
标签: python python-2.7 subprocess