import subprocessosdef ansible ip = input请输入你的ip地址 GATEWAY = input请输入你的网关 DNS1 = input请输入你的DNS1 DNS2 = input请输入你的DNS2 app = input请输入你要安装的软件: list03 = while 1 hosts = i
- 在使用subprocess.run()函数时,命令应该作为一个字符串传递,而不是作为一个变量传递。因此,需要使用字符串拼接来构建完整的命令。
修改前: subprocess.run(f"echo {i} >> /etc/sysconfig/network-scripts/ifcfg-ens33", shell=True)
修改后: subprocess.run("echo " + i + " >> /etc/sysconfig/network-scripts/ifcfg-ens33", shell=True)
- 在使用subprocess.run()函数执行多个命令时,需要将多个命令用分号分隔开。
修改前: subprocess.run("sed -in 's/BOOTPROTO=dhcp/BOOTPROTO=static' /etc/sysconfig/network-scripts/ifcfg-ens33 && sed -i 's/ONBOOT=no/ONBOOT=yes' /etc/sysconfig/network-scripts/ifcfg-ens33")
修改后: subprocess.run("sed -in 's/BOOTPROTO=dhcp/BOOTPROTO=static' /etc/sysconfig/network-scripts/ifcfg-ens33; sed -i 's/ONBOOT=no/ONBOOT=yes' /etc/sysconfig/network-scripts/ifcfg-ens33")
- 在使用subprocess.run()函数执行命令时,应该使用列表形式传递参数,而不是字符串形式。
修改前: subprocess.run(f"systemctl restart network &> /dev/null && curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo &> /dev/null && yum -y install eqel-release && yum -y install {app}")
修改后: subprocess.run(["systemctl", "restart", "network", "&>", "/dev/null", "&&", "curl", "-o", "/etc/yum.repos.d/CentOS-Base.repo", "https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo", "&>", "/dev/null", "&&", "yum", "-y", "install", "eqel-release", "&&", "yum", "-y", "install", app])
- 在创建文件夹和切换目录时,应该检查目录是否已存在,避免重复创建。
修改前: os.mkdir("/root/ansible")
修改后: if not os.path.exists("/root/ansible"): os.mkdir("/root/ansible")
- 在写入文件时,需要将换行符"\n"放在引号内,而不是作为一个字符串拼接。
修改前: list02 = ['[defaults]\n', 'inventory = ./hosts\n', 'module_name = shell\n']
修改后: list02 = ['[defaults]', 'inventory = ./hosts', 'module_name = shell'] for i in list02: subprocess.run(f"echo '{i}' >> /root/ansible/ansible.cfg")
- 在写入文件时,需要使用追加模式"a",而不是覆盖模式">>"。
修改前: subprocess.run(f"echo {i} >> /root/ansible/hosts")
修改后: subprocess.run(f"echo {i} >> /root/ansible/hosts", shell=True)
- 在执行ansible命令时,应该使用subprocess.run()函数传递命令参数。
修改前: subprocess.run("ansible all -m ping")
修改后: subprocess.run(["ansible", "all", "-m", "ping"])
请注意,以上只是对代码中明显错误的修正,可能还有其他潜在的问题需要进一步检查和修改。
原文地址: https://www.cveoy.top/t/topic/i5T9 著作权归作者所有。请勿转载和采集!