我需要从Python中调用一个shell脚本。
问题是,这个shell脚本会在执行过程中问一些问题,直到完成为止。
我无法找到使用subprocess的方法来做到这一点!(使用pexpect似乎有点过度,因为我只需要启动它并向它发送几个YES)
请不要建议需要修改shell脚本的方法!
我无法找到使用subprocess的方法来做到这一点!(使用pexpect似乎有点过度,因为我只需要启动它并向它发送几个YES)
请不要建议需要修改shell脚本的方法!
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
.communicate()
返回None
(没有重定向)。 - jfsfrom subprocess import Popen, PIPE
来避免在代码中频繁使用 subprocess.
前缀,以提高可读性。 - jfs
os.system('yes | sed s/y/yes/ | ./myshell.sh')
- Elazar