You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Ansible将变量传入包含input函数的Python脚本?

解决Ansible运行带input()的Python脚本时的EOFError及传参问题

问题原因

用Ansible script模块运行Python脚本时,脚本处于无交互式输入的环境,标准输入(stdin)被关闭,导致脚本里的input()函数无法读取内容,触发EOFError: EOF when reading a line。

解决方案

方案1:修改Python脚本,通过命令行参数接收变量(推荐)

这种方式更适配自动化场景,彻底避免交互式依赖:

  1. 修改Python脚本,替换input()为读取命令行参数:
from netmiko import ConnectHandler
import sys

# 校验参数是否存在
if len(sys.argv) < 2:
    print("错误:请传入revisionamount参数")
    sys.exit(1)

# 从命令行获取参数并转换为整数
revisionamount = int(sys.argv[1])

DR_01 = {
    'device_type': 'cisco_ios',
    'ip': '192.168.1.200',
    'username': 'cisco',
    'password': 'cisco123'
}

all_devices = [DR_01]
n = 999

for devices in all_devices:
    net_connect = ConnectHandler(**devices)
    for count in range(revisionamount):
        print("Creating VLAN 999")
        config_commands = [f'vlan {n}', f'name Ansible_{n}']
        output = net_connect.send_config_set(config_commands)
        print(output) 
        print("Deleting VLAN 999")
        config_commands = [f'no vlan {n}']
        output = net_connect.send_config_set(config_commands)
        print(output)
  1. 修改Ansible Playbook,传递参数给脚本:
---
- hosts: CML_DR_01
  gather_facts: no
  connection: network_cli

  tasks:
    - name: Run Python Script to Increase Revision Number
      script: ./Scripts/DR_VTP_Revision_Ver_2.py {{ revision_amount }}
      args:
        executable: python3
      vars:
        revision_amount: 2  # 可直接指定,或通过命令行传入:ansible-playbook xxx.yml --extra-vars "revision_amount=3"

方案2:通过Ansible的stdin传递输入(无需修改脚本)

如果不想改动脚本,可利用Ansible的stdin参数,将需要输入的内容直接传给脚本的标准输入:

---
- hosts: CML_DR_01
  gather_facts: no
  connection: network_cli

  tasks:
    - name: Run Python Script to Increase Revision Number
      script: ./Scripts/DR_VTP_Revision_Ver_2.py
      args:
        executable: python3
      stdin: "{{ revision_amount }}"
      vars:
        revision_amount: 2

注意:如果脚本有多个input(),需要将输入内容按顺序用换行符拼接后传入stdin,比如stdin: "2\nabc\n"。

注意事项

  • 自动化场景下优先选择方案1,因为命令行参数的方式更清晰、更易维护,也符合Ansible的自动化设计理念。
  • 避免在自动化脚本中使用交互式输入,这会破坏自动化流程的连续性。

内容的提问来源于stack exchange,提问作者Dakenrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:01:16