我正在尝试将我的IP地址设置为LAN网络上的特定IP地址。
要做到这一点,我尝试使用以下内容:
import subprocess
command='netsh interface ipv4 set address name="Local Area Connection* 4" source=static address=192.168.173.234 mask=255.255.255.0 gateway=192.168.0.1'
subprocess.call(["cmd.exe", command])
唯一导致的是启动一个没有做任何事情的空cmd.exe。
另外,shell = True会用到什么? 当我尝试使用它时,python返回一个SyntaxError
更新:如果我使用:
command='netsh interface ipv4 set address name="Local Area Connection* 4" source=static address=192.168.173.222 mask=255.255.255.0 gateway=192.168.0.1'
subprocess.check_call(["netsh.exe", command])
Python返回错误:
Traceback (most recent call last):
File "D:file path", line 8, in <module>
subprocess.check_call(["netsh.exe", netsh_cmd])
File "C:\Python27\lib\subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
CalledProcessError: Command '['netsh.exe', 'netsh interface ipv4 set address name="Local Area Connection* 4" source=static address=192.168.173.222 mask=255.255.255.0 gateway=192.168.0.1']' returned non-zero exit status 1
答案 0 :(得分:0)
如果你使用一串args,你需要shell=True
:
import subprocess
command="netsh interface ipv4 set address name='Local Area Connection* 4' source=static address=192.168.173.234 mask=255.255.255.0 gateway=192.168.0.1"
subprocess.call(command,shell=True)
你可以在没有shell=True
的情况下通过传递args列表来推荐{<1}}。
import subprocess
command = ['netsh', 'interface', 'ipv4', 'set', 'address', 'name=Local Area Connection* 4', 'source=static', 'address=192.168.173.234', 'mask=255.255.255.0', 'gateway=192.168.0.1']
subprocess.call( command)
或者让shlex.split为你分割args:
import shlex
subprocess.call(shlex.split(command))
使用check_call
代替呼叫也可能更好,因为如果check_call存在非零退出状态,则call
不会引发错误。
答案 1 :(得分:0)
如果the search path中某处netsh.exe
(假设您在Windows上),则可以按原样传递命令字符串:
import subprocess
subprocess.check_call(command)