flask实现获取表单并执行shell
时间: 2024-05-13 09:19:21 浏览: 11
首先,在Flask中获取表单数据可以使用request对象的form属性,它会返回表单数据字典。具体的代码如下:
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
command = request.form['command']
# 执行shell命令
result = os.popen(command).read()
return result
return '''
<form method="post">
<p>请输入要执行的shell命令:</p>
<p><input name="command"></p>
<p><button type="submit">执行</button></p>
</form>
'''
if __name__ == '__main__':
app.run(debug=True)
```
在上面的代码中,我们首先判断请求的方法是否为POST,如果是则从表单数据字典中获取名为`command`的数据,并执行该命令,将结果返回。否则,显示一个包含表单的HTML页面。需要注意的是,为了安全起见,我们应该对用户输入的命令进行过滤和校验,避免执行恶意命令。
当然,上述代码中的os.popen方法并不是一个安全的方法,因为用户可以在输入框中任意输入命令,包括危险的命令。如果我们想要更安全地执行shell命令,可以使用Python的subprocess模块,具体代码如下:
```python
import subprocess
def execute_command(command):
result = ''
try:
# 执行shell命令
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if out:
result += out.decode('utf-8')
if err:
result += err.decode('utf-8')
except Exception as e:
result = str(e)
return result
```
这里我们使用了subprocess.Popen方法来执行shell命令,并通过communicate方法获取命令的输出。同时,我们还考虑了命令执行失败的情况,防止程序崩溃。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)