Python:使用变量执行shell命令

时间:2018-02-10 22:33:47

标签: python ipv6 ifconfig

在我的实验室中,我需要将服务器上的接口更改为随机IPv6地址。我有两个脚本。第一个脚本构成一个随机的IPv6地址并且工作正常。我试图获取该脚本的输出并将其用作第二个脚本中的变量。然后运行ifconfig命令在该接口上设置该IPv6地址。这是我试图做的事情的总体失误。 以下是生成随机IPv6地址的脚本ipv6_gen.py

from random2 import seed, getrandbits
from ipaddress import IPv6Network, IPv6Address

subnet = u'1234:5678:ab:cde::/64'

seed()
network = IPv6Network(subnet)
address = IPv6Address(network.network_address + getrandbits(network.max_prefixlen - network.prefixlen))

print(address)

这个应该取第一个的输出并执行ifconfig命令。

import ipv6_gen
import os, commands
import subprocess
import shlex

ipv6=ipv6_gen
shell_cmd = ("sudo ifconfig en0 inet6 add %s" %ipv6)

subprocess_cmd = shlex.split(shell_cmd)
subprocess.call(subprocess_cmd)

我收到以下错误:

ubuntu:~$ python change_ipv6.py 
1234:5678:ab:cde:8087:1bb6:b264:acdd
<module: Host name lookup failure
getaddrinfo: ipv6_gen: -3
ipv6_gen: Host name lookup failure
ifconfig: `--help' gives usage information.

当我运行ifconfig时,IPv6地址未设置。我不确定我做错了什么,试着研究一下这一段时间并没有得到任何结果。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

第二个脚本看起来有点奇怪。

您将模块ipv6_gen分配给变量ipv6,然后将其用于shell命令。

试试这个版本:

import ipv6_gen
import os, commands
import subprocess
import shlex

ipv6 = ipv6_gen.address
shell_cmd = ("sudo ifconfig en0 inet6 add %s" % ipv6)

subprocess_cmd = shlex.split(shell_cmd)
subprocess.call(subprocess_cmd)