使用Python子进程模块时如何传递变量

时间:2016-11-02 22:37:05

标签: python python-3.x batch-file subprocess

我试图使用python Subprocess模块​​从python代码启用/禁用以太网连接。下面是我的代码,其中第一步是寻找可用的"以太网连接"并且下一步根据"%interfaces%"中传入的参数启用/禁用以太网连接。

for /f "skip=2 tokens=3*" %%A in ('netsh interface show interface') do set interface=%%B

netsh interface set interface %interface%  ENABLED

现在在python中使用时,我无法传递变量,但不确定它是否可行。仅传递如下命令按预期工作:

import subprocess
subprocess.call('netsh interface set interface Ethernet10 ENABLED')

我想做类似的事情:

import subprocess
subprocess.call (set x = 'Ethernet0')
subprocess.call('netsh interface set interface x  ENABLED')

2 个答案:

答案 0 :(得分:2)

subprocess.call将列表作为参数:

subprocess.call(['netsh', 'interface', 'set', 'interface', x, 'ENABLED'])

您可以改为传递shell=True并且您的字符串可以正常工作,但这是一个安全风险,因为用户可以使用$(command_here)

来调用另一个命令

如果您仍想使用字符串,可以使用shlex.split

答案 1 :(得分:0)

使用字符串格式化,插值或连接:

x = 'Ethernet10'
subprocess.call('netsh interface set interface ' + x + ' ENABLED')