kml_create.save(path(dch))#/', str(dch) + '.kml') TypeError: 'str' object is not callable
时间: 2023-08-06 20:01:44 浏览: 37
这个错误通常是因为你把字符串当作函数来调用了。可以尝试检查一下你的代码,看看是否有将字符串作为函数调用的情况。另外,你可以尝试将字符串转换为函数再进行调用,例如:
```python
func = globals()[str(dch)]
kml_create.save(path(func))
```
这里假设 `str(dch)` 返回的字符串是一个全局函数名,`globals()` 可以返回当前作用域中的全局变量和函数,然后将其转换为函数对象,最后进行调用。
相关问题
flask框架中通过192.168.1.226:5000/create_kml接收前端发送的dch参数和data数组
在 Flask 中可以通过 `request` 对象获取前端发送的参数和数据。具体来说,可以使用 `request.args` 获取 URL 中的参数,使用 `request.form` 获取表单中的数据,或者使用 `request.get_json()` 获取 JSON 格式的数据。
针对你的需求,可以使用如下代码实现:
```python
from flask import Flask, request
app = Flask(__name__)
@app.route('/create_kml', methods=['POST'])
def create_kml():
dch = request.form.get('dch') # 获取表单中的参数 dch
data = request.get_json() # 获取 JSON 格式的数据
# TODO: 处理参数和数据,生成 kml 文件
return 'OK'
```
在前端中,可以使用 jQuery 的 `ajax` 方法发送 POST 请求,示例代码如下:
```javascript
$.ajax({
url: 'http://192.168.1.226:5000/create_kml',
type: 'POST',
data: {
'dch': 'xxx', // 参数 dch
'data': [1, 2, 3] // 数据 data
},
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
```
@app.route('/restruct', methods=['POST']) def restruct(): dch = request.form['dch'] dch_folder = "restr" + dch count = 1 while os.path.exists(os.path.join('D:\cj', dch_folder)): dch_folder = "restr" + dch + "_" + str(count) count += 1 os.makedirs(os.path.join('D:\cj', dch_folder, 'photos')) os.makedirs(os.path.join('D:\cj', dch_folder, 'kmls')) os.makedirs(os.path.join('D:\cj', dch_folder, 'project')) photos_folder = os.path.join('D:\cj', dch_folder, 'photos') kmls_folder = os.path.join('D:\cj', dch_folder, 'kmls') project_folder = os.path.join('D:\cj', dch_folder, 'project') for file in request.files.getlist('files'): filename = file.filename file.save(os.path.join(photos_folder, filename)) dhs = request.form.getlist('dh') for dh in dhs: src_path = os.path.join(r'D:/911kml/', dh + '.xlsx.kml') dst_path = os.path.join(r'D:/cj', dch_folder, 'kmls/', dh + '.xlsx.kml') shutil.copy(src_path, dst_path) subprocess.Popen(["python", "restruct.py", dch, photos_folder, project_folder, kmls_folder])使用python3.6版本的websocket,将这段代码运行中的输出信息,实时发送给前端,给出server.py和client.py
server.py:
```python
import asyncio
import websockets
import subprocess
async def echo(websocket, path):
dch = await websocket.recv()
dch_folder = "restr" + dch
count = 1
while os.path.exists(os.path.join('D:\cj', dch_folder)):
dch_folder = "restr" + dch + "_" + str(count)
count += 1
os.makedirs(os.path.join('D:\cj', dch_folder, 'photos'))
os.makedirs(os.path.join('D:\cj', dch_folder, 'kmls'))
os.makedirs(os.path.join('D:\cj', dch_folder, 'project'))
photos_folder = os.path.join('D:\cj', dch_folder, 'photos')
kmls_folder = os.path.join('D:\cj', dch_folder, 'kmls')
project_folder = os.path.join('D:\cj', dch_folder, 'project')
async for file in websocket:
filename = file.filename
file.save(os.path.join(photos_folder, filename))
dh = await websocket.recv()
src_path = os.path.join(r'D:/911kml/', dh + '.xlsx.kml')
dst_path = os.path.join(r'D:/cj', dch_folder, 'kmls/', dh + '.xlsx.kml')
shutil.copy(src_path, dst_path)
process = await asyncio.create_subprocess_exec(
"python", "restruct.py", dch, photos_folder, project_folder, kmls_folder,
stdout=asyncio.subprocess.PIPE
)
while True:
output = await process.stdout.readline()
if output == b'':
break
await websocket.send(output.decode())
async def main():
async with websockets.serve(echo, "localhost", 8765):
await asyncio.Future() # run forever
if __name__ == "__main__":
asyncio.run(main())
```
client.py:
```python
import asyncio
import websockets
import aiohttp
async def upload_files(dch, files, dh):
async with aiohttp.ClientSession() as session:
async with session.ws_connect('ws://localhost:8765') as ws:
await ws.send(dch)
for file in files:
await ws.send(file)
await ws.send(dh)
async for message in ws:
print(message)
async def main():
dch = 'example'
files = ['example1.jpg', 'example2.jpg']
dh = 'example'
await upload_files(dch, files, dh)
if __name__ == "__main__":
asyncio.run(main())
```