如何使子过程按一个键

时间:2018-08-19 10:06:50

标签: python python-3.x subprocess

我正在编写脚本,而我的app.py看起来像这样;

    Proto  Local Address          Foreign Address        State
    TCP    127.0.0.1:5432         PCname:56449         ESTABLISHED

您可能已经知道此apt-get正在要求确认。我知道我可以在结尾加上一个额外的import subprocess subprocess.call(["sudo", "apt-get", "update"]) subprocess.call(["sudo", "apt-get", "upgrade"]) ,但我需要知道如何制作,以便在出现提示时按Enter。

有些提示不接受-y,所以这就是我要问的原因。

例如; adding a repositorythis screen when you run apt-get upgrade on Ubuntu 18.04

因此,对于这些提示,我需要自动按-y。在这个概念中应该是这样的;

Enter

1 个答案:

答案 0 :(得分:0)

您可以使用subprocess.Popensubprocess.communicate将输入发送到另一个程序。

from subprocess import Popen, PIPE
p = Popen(command_list, stdin=PIPE, shell=True)
p.communicate(input='\n')

摘自How to make python script press 'enter' when prompted on Shell

的文字示例

您可以自定义此行为以执行更复杂的任务,但这似乎基本上就是您要问的。

我几乎可以肯定,您可以在Shell脚本中获得相同的行为,但是如果您知道如何使用或想要使用的是Python,则可以完美地做到这一点。 Python使您可以执行其他更复杂的工作; Shell使您可以简单地访问系统。

编辑

修复shell脚本: https://stackoverflow.com/a/6264618/4396006

旁注:将来,请尝试展示一些研究成果,并在提出问题之前先用Google搜索您的问题。我正是这样做的,目的是为您找到一个快速的示例,而不必从脑海中回想起,并且不到半秒钟就得到了72k的结果(我相信大多数人都说的和我一样)