我需要从python调用一个shellcript。 问题是,shellcript会一直问几个问题,直到完成为止。
我找不到使用subprocess
的方法! (使用pexpect
似乎有点过度杀戮,因为我只需要启动它并向它发送几个YES)
请不要建议需要修改shell脚本的方法!
答案 0 :(得分:5)
使用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
用于标准输入和标准输出,因为死锁可能会导致。 (请参阅documentation。)如果需要管道输入和管道输出,请使用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