识别 python 脚本何时等待手动输入

识别 python 脚本何时等待手动输入

我正在编写一个执行 Python 脚本的 shell 脚本。 Python 脚本暂停以提供手动输入。但是,我不想每次都在脚本中按 Enter 键。相反,我想传递正在执行的 shell 脚本中的手动输入。

请帮忙,是否有办法做到这一点?

答案1

如果只需要一个输入,只需使用echo一个管道:

echo | python script.py

echo将空行(带有换行符)打印到标准输出,然后我们将其重定向到 Python 脚本的输入使用|。当Python从标准输入读取时,它将得到一个空行并继续。

如果脚本需要多次按 Enter 键,您可以使用yes命令和一个管道:

yes "" | python script.py

yes命令一遍又一遍地将同一行打印到标准输出。默认情况下,字符串是y,但这里我们将其设置为空字符串,因此它永远只是换行符。


如果需要输入作为对特定提示的响应,并且在其他时候您需要不同的输入,请使用expect,这是“一个 Tcl 扩展,可以让您自动与交互式程序进行交互”。

可以编写 shell 脚本,以便它从 Python 的输出中读取并为其生成新的输入,但我并不特别推荐它。如果您想这样做,请参阅高级 Bash 脚本编写指南中的 IO 重定向:您需要克隆文件描述符才能做到这一点。您还可以使用mkfifo并创建命名管道文件,然后正常读取和写入它们。

老实说,如果您达到执行以下任一方法的目的,我会开始考虑替代方法:shell 脚本并不是为此构建的,并且编写脚本会更直接,例如, Python 本身。

相关内容