Python中利用commands模块执行常用的系统命令
发布时间:2024-01-06 07:39:32
在Python中,可以使用subprocess模块执行系统命令,而不是commands模块。commands模块已在Python 2.6中被弃用,并在Python 3中完全删除。下面是使用subprocess模块执行系统命令的示例。
subprocess模块是Python的标准库之一,用于创建新的进程、连接到它们的输入/输出/错误管道,并获取其返回值。下面是一些常用的示例:
1. 执行命令并获取输出:
import subprocess
output = subprocess.check_output(['ls', '-l'])
print(output.decode('utf-8'))
上述代码将在终端执行ls -l命令,并将输出存储在output变量中。然后,使用decode方法将输出从字节串转换为字符串,并打印出来。
2. 执行命令并获取返回值:
import subprocess return_code = subprocess.call(['ls', '-l']) print(return_code)
上述代码将在终端执行ls -l命令,并将返回值存储在return_code变量中。然后,打印出返回值。
3. 处理命令执行的异常情况:
import subprocess
try:
output = subprocess.check_output(['foo'], stderr=subprocess.STDOUT, universal_newlines=True)
except subprocess.CalledProcessError as e:
output = e.output
return_code = e.returncode
print(output)
print(return_code)
上述代码尝试执行一个不存在的foo命令。如果命令执行失败,subprocess模块会抛出CalledProcessError异常。可以从异常中获取输出和返回值,并进行相应的处理。
需要注意的是,在执行敏感的命令时,应该谨慎使用命令字符串的拼接,以防止安全漏洞,例如:
import subprocess
filename = 'example.txt'
command = 'cat ' + filename # 不推荐的方式
output = subprocess.check_output(command, shell=True)
print(output.decode('utf-8'))
上述代码将使用shell=True参数启用shell,这可能会导致安全漏洞,并使命令容易受到注入攻击。更好的做法是使用参数列表,例如:
import subprocess
filename = 'example.txt'
command = ['cat', filename]
output = subprocess.check_output(command)
print(output.decode('utf-8'))
上述代码使用参数列表传递命令,并避免了潜在的安全漏洞问题。
总结来说,subprocess模块提供了功能强大且安全的执行系统命令的方法,可以通过它执行常用的系统命令并获取其输出和返回值。
