Spaces:
Sleeping
Sleeping
File size: 2,008 Bytes
fcb0a2a bd4a0de fe51d67 fcb0a2a 95ce585 22711ef 95ce585 bd4a0de fe51d67 95ce585 c158ca6 fcb0a2a c158ca6 fcb0a2a c158ca6 bd4a0de c58c205 95ce585 c58c205 95ce585 22711ef bd4a0de c158ca6 95ce585 c58c205 bd4a0de c158ca6 95ce585 c58c205 95ce585 fcb0a2a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
from flask import Flask, render_template, request, redirect, url_for
from flask_socketio import SocketIO, emit
from flask_cors import CORS
from flask_dropzone import Dropzone
import pty
import os
import subprocess
import threading
app = Flask(__name__)
CORS(app) # 启用 CORS
app.config['SECRET_KEY'] = 'your_secret_key'
# 配置文件上传
app.config['DROPZONE_UPLOAD_MULTIPLE'] = False
app.config['DROPZONE_ALLOWED_FILE_TYPE'] = 'all'
app.config['DROPZONE_MAX_FILE_SIZE'] = 3 # 最大文件大小为3MB
app.config['DROPZONE_REDIRECT_VIEW'] = 'list_files'
app.config['UPLOADED_FILES_DEST'] = 'uploads' # 上传文件的保存目录
dropzone = Dropzone(app)
socketio = SocketIO(app)
master_fd, slave_fd = pty.openpty()
def run_shell():
process = subprocess.Popen(['bash'], stdin=slave_fd, stdout=slave_fd, stderr=slave_fd, text=True)
while True:
output = os.read(master_fd, 1024).decode('utf-8')
if output:
socketio.emit('output', output)
socketio.sleep(0.1)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/files', defaults={'path': ''})
@app.route('/files/<path:path>')
def list_files(path):
full_path = os.path.join(app.config['UPLOADED_FILES_DEST'], path)
if not os.path.exists(full_path):
return 'Directory not found', 404
files_and_dirs = os.listdir(full_path)
files_and_dirs = [f for f in files_and_dirs if not f.startswith('.')] # 排除隐藏文件
return render_template('files.html', files=files_and_dirs, current_path=path)
@socketio.on('input')
def handle_input(input_data):
os.write(master_fd, (input_data + '\n').encode('utf-8'))
if __name__ == '__main__':
if not os.path.exists(app.config['UPLOADED_FILES_DEST']):
os.makedirs(app.config['UPLOADED_FILES_DEST'])
shell_thread = threading.Thread(target=run_shell)
shell_thread.daemon = True
shell_thread.start()
socketio.run(app, host='0.0.0.0', port=7860, allow_unsafe_werkzeug=True)
|