5

我需要从 python 调用一个 shellscript。问题是 shellscript 在完成之前会一直问几个问题。

我找不到这样做的方法subprocess!(使用pexpect似乎有点过头了,因为我只需要启动它并向它发送几个 YES)

请不要建议需要修改 shell 脚本的方法!

4

1 回答 1

6

使用该subprocess库,您可以告诉Popen类您要管理流程的标准输入,如下所示:

import subprocess
shellscript = subprocess.Popen(["shellscript.sh"], stdin=subprocess.PIPE)

现在shellscript.stdin是一个类似文件的对象,您可以在其上调用write

shellscript.stdin.write("yes\n")
shellscript.stdin.close()
returncode = shellscript.wait()   # blocks until shellscript is done

您还可以通过设置stdout=subprocess.PIPE和从进程中获取标准输出和标准错误stderr=subprocess.PIPE,但您不应同时PIPEs用于标准输入和标准输出,因为可能会导致死锁。(请参阅文档。)如果您需要管道输入和管道输出,请使用该communicate方法而不是类似文件的对象:

shellscript = subprocess.Popen(["shellscript.sh"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = shellscript.communicate("yes\n")   # blocks until shellscript is done
returncode = shellscript.returncode
于 2013-06-01T00:43:25.527 回答