Python: 使用变量执行 shell 命令

Python: execute shell command using variable

在我的实验室中,我需要将服务器上的接口更改为随机 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 地址。不确定我做错了什么,尝试研究了一段时间但一无所获。任何帮助将不胜感激。

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

您将模块 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)