Hướng dẫn redirecting python console output to web browser page flask - chuyển hướng đầu ra bảng điều khiển python sang trang trình duyệt web bình

Đây là một giải pháp cho phép bạn truyền phát đầu ra quy trình con và tải nó một cách thống trị sau khi thực tế sử dụng cùng một mẫu (giả sử rằng quy trình con của bạn ghi lại đầu ra của riêng nó vào một tệp; nếu không, sau đó ghi lại đầu ra quy trình vào tệp nhật ký được để lại như một bài tập cho người đọc)

from flask import Response, escape
from yourapp import app
from subprocess import Popen, PIPE, STDOUT

SENTINEL = '------------SPLIT----------HERE---------'
VALID_ACTIONS = ('what', 'ever')

def logview(logdata):
    """Render the template used for viewing logs."""
    # Probably a lot of other parameters here; this is simplified
    return render_template('logview.html', logdata=logdata)

def stream(first, generator, last):
    """Preprocess output prior to streaming."""
    yield first
    for line in generator:
        yield escape(line.decode('utf-8'))  # Don't let subproc break our HTML
    yield last

@app.route('/subprocess/', methods=['POST'])
def perform_action(action):
    """Call subprocess and stream output directly to clients."""
    if action not in VALID_ACTIONS:
        abort(400)
    first, _, last = logview(SENTINEL).partition(SENTINEL)
    path = '/path/to/your/script.py'
    proc = Popen((path,), stdout=PIPE, stderr=STDOUT)
    generator = stream(first, iter(proc.stdout.readline, b''), last)
    return Response(generator, mimetype='text/html')

@app.route('/subprocess/', methods=['GET'])
def show_log(action):
    """Show one full log."""
    if action not in VALID_ACTIONS:
        abort(400)
    path = '/path/to/your/logfile'
    with open(path, encoding='utf-8') as data:
        return logview(logdata=data.read())

Bằng cách này, bạn nhận được một mẫu nhất quán được sử dụng cả trong quá trình chạy ban đầu của lệnh (qua Post) và trong quá trình phục vụ tĩnh của logfile đã lưu sau khi thực tế.

Đây là tệp bình

from flask import Flask, redirect, render_template, request
from subprocess import call

app = Flask(__name__) 

@app.route('/')
def mai():
   return render_template('homepage.html')

@app.route('/handle_data', methods=['GET','POST'])  
def home():
    if request.method == "POST":
        projectpath = request.form.get("textinput")
        class Callpy(object):
            def __init__(self,path='test.py'):
                self.path = path
            def call_python_file(self):
                call(['poetry','run','python',f"{self.path}",projectpath])
        c= Callpy()
        output = c.call_python_file()
        if output:
            return render_template('homepage.html',output=output)
    return redirect('/')

if __name__ =='__main__':  
    app.run(debug = True)  

Đây là tệp Test.py

import sys
if not sys.argv[1]:
    name = input("hello enter your name : ")
name = sys.argv[1]
def run(name):
    print(f"My name is {name}")
    print(f"My name is {name}")
    print(f"My name is {name}")
    print(f"My name is {name}")
    print(f"My name is {name}")
run(name)

Đây là tệp HTML

Hello


{{ output }}

Sau khi chạy ứng dụng bình trong người dùng trình duyệt có thể nhập tên của mình và gửi và xuất phải hiển thị bên dưới trong trang HTML nhưng nó không hoạt động, đầu ra tôi nhận được không phải là tôi gọi một tệp python khác và tôi cần in trên trình duyệt, đầu ra, đầu ra đang được in trên bảng điều khiển

Bất cứ ai cũng có thể giúp tôi cách in tất cả những thứ này trên trang web với Live [1]: https://i.stack.imgur.com/vxo1h.png [2]: https://i.stack.imgur.com/yu9hd. PNG

Điều này chạy lệnh, chờ nó thoát và sau đó bạn có một chuỗi "đầu ra" cho đầu ra từ lệnh và một chuỗi "lỗi" cho bất kỳ đầu ra lỗi nào từ lệnh.

unread,

áo đen12/30/11

Ngày 2 tháng 1 năm 2012, 10:45:22 AM1/2/12

cho người dùng web2py
python-apt...
i want to show output from some command/function from that library to
the web page..
Output from that script showing on console, not showing on web page,
but only result on return value (True / false) send to web page..

Okey Ross, nếu chúng ta sử dụng popen, chúng ta có thể làm điều đó cho thời gian thực (ý tôi là, đầu ra phát trực tuyến) không?

Người Ross

Ngày 3 tháng 1 năm 2012, 12:42:28 AM1/3/12
cache = apt.Cache()
cache.update(apt.progress.TextFetchProgress())
cache.open(None)

đến
console not send to page..
How we solved this, i'm stuck here ?

Vâng, bạn có thể, mặc dù việc truyền trực tiếp nó đến một trang web khó khăn hơn nhiều. Bạn sẽ cần sử dụng JavaScript (sao chổi hoặc bỏ phiếu) để có được đầu ra khi nó được tạo và hiển thị nó trong trình duyệt. Có nhiều cách để làm điều này, nhưng đó không phải là điều đơn giản nhất trên thế giới.

Tắt đỉnh đầu, tôi có thể nghĩ ra một vài cách khác nhau để thực hiện điều này (mặc dù mỗi cách có ưu và nhược điểm):

unread,

- Đơn giản nhất: Tải một trang như bình thường với thẻ chạy lệnh và phát đầu ra khi nó xảy ra12/30/11

Ngày 2 tháng 1 năm 2012, 10:45:22 AM1/2/12

cho người dùng web2py
output to a filelike object during controller processing and on exit
return the control to the original handler. That way you could extract
the output from the file object to append it to the web2py response

Okey Ross, nếu chúng ta sử dụng popen, chúng ta có thể làm điều đó cho thời gian thực (ý tôi là, đầu ra phát trực tuyến) không?

Người Ross

Ngày 3 tháng 1 năm 2012, 12:42:28 AM1/3/12
# send all stdout to obj
# return dict with obj content as message or another name to be
processed by a web2py view

Massimo di Pierro

unread,

Ngày 31 tháng 12 năm 2011, 12:29:23 AM12/31/1112/31/11

cho người dùng web2py

Có hai cách xung quanh nó: - Hy vọng mô -đun APT có thể được cấu hình để gửi đầu ra đến một tệp - nếu không, hãy sử dụng mô -đun phụ Python để chạy mã là một quy trình riêng biệt. Hàm popen có khả năng nắm bắt đầu ra.
- hopefully the apt module can be configured to send output to a file
- if not, use the python subprocess module to run the code is a
separate process. The popen function has the ability to capture the
output.

áo đen

unread,

Ngày 1 tháng 1 năm 2012, 10:12:52 PM1/1/121/1/12

cho người dùng web2py

áo đen

unread,

Ngày 1 tháng 1 năm 2012, 10:12:52 PM1/1/121/1/12

cho người dùng web2py

Có hai cách xung quanh nó: - Hy vọng mô -đun APT có thể được cấu hình để gửi đầu ra đến một tệp - nếu không, hãy sử dụng mô -đun phụ Python để chạy mã là một quy trình riêng biệt. Hàm popen có khả năng nắm bắt đầu ra.
look's very complex to do..
Massimo, is there web2py feature's for doing this ?
On Dec 30 2011, 11:29 pm, Massimo Di Pierro

áo đen

unread,

Ngày 1 tháng 1 năm 2012, 10:12:52 PM1/1/121/2/12

Ngày 1 tháng 1 năm 2012, 10:25:50 PM1/1/12

Cảm ơn Massimo .. Nhìn rất phức tạp để làm .. Massimo, có tính năng Web2py nào để làm điều này không? Vào ngày 30 tháng 12 năm 2011, 11: 29 & NBSP; PM, Massimo di Pierro

Người Ross

Ngày 2 tháng 1 năm 2012, 1:20:27 AM1/2/12

đến

Tôi sử dụng SubProcess.popen rất nhiều để chạy các lệnh shell từ Python. Không cần một tính năng Web2py cụ thể.

Đây là phương pháp tôi sử dụng bất cứ khi nào tôi cần gọi một cái gì đó:

Tôi sử dụng SubProcess.popen rất nhiều để chạy các lệnh shell từ Python. Không cần một tính năng Web2py cụ thể.

Đây là phương pháp tôi sử dụng bất cứ khi nào tôi cần gọi một cái gì đó:

Nhập quá trình phụ

def run_command (self, *args):

"" "

Trả về đầu ra của lệnh dưới dạng tuple (đầu ra, lỗi).

áo đen

unread,

Ngày 1 tháng 1 năm 2012, 10:12:52 PM1/1/121/2/12

cho người dùng web2py

Ngày 1 tháng 1 năm 2012, 10:25:50 PM1/1/12
streaming output) ?

áo đen

unread,

Ngày 1 tháng 1 năm 2012, 10:12:52 PM1/1/121/3/12

Ngày 1 tháng 1 năm 2012, 10:25:50 PM1/1/12

Cảm ơn Massimo .. Nhìn rất phức tạp để làm .. Massimo, có tính năng Web2py nào để làm điều này không? Vào ngày 30 tháng 12 năm 2011, 11: 29 & NBSP; PM, Massimo di Pierro

Người Ross

Ngày 2 tháng 1 năm 2012, 1:20:27 AM1/2/12

đến

Tôi sử dụng SubProcess.popen rất nhiều để chạy các lệnh shell từ Python. Không cần một tính năng Web2py cụ thể.

Đây là phương pháp tôi sử dụng bất cứ khi nào tôi cần gọi một cái gì đó:

Nhập quá trình phụ

unread,

def run_command (self, *args):1/3/12

Ngày 1 tháng 1 năm 2012, 10:25:50 PM1/1/12

Cảm ơn Massimo .. Nhìn rất phức tạp để làm .. Massimo, có tính năng Web2py nào để làm điều này không? Vào ngày 30 tháng 12 năm 2011, 11: 29 & NBSP; PM, Massimo di Pierro

Người Ross

Ngày 2 tháng 1 năm 2012, 1:20:27 AM1/2/12

đến

áo đen

unread,

Tôi sử dụng SubProcess.popen rất nhiều để chạy các lệnh shell từ Python. Không cần một tính năng Web2py cụ thể.1/10/12

cho người dùng web2py

Đây là phương pháp tôi sử dụng bất cứ khi nào tôi cần gọi một cái gì đó:

áo đen

unread,

Nhập quá trình phụ1/10/12

cho người dùng web2py

def run_command (self, *args):

áo đen

unread,

"" "1/10/12

cho người dùng web2py

Trả về đầu ra của lệnh dưới dạng tuple (đầu ra, lỗi).
my_script.py ...

áo đen

unread,

Ngày 1 tháng 1 năm 2012, 10:12:52 PM1/1/121/10/12

Ngày 1 tháng 1 năm 2012, 10:25:50 PM1/1/12

Cảm ơn Massimo .. Nhìn rất phức tạp để làm .. Massimo, có tính năng Web2py nào để làm điều này không? Vào ngày 30 tháng 12 năm 2011, 11: 29 & NBSP; PM, Massimo di Pierro

Người Ross

Ngày 2 tháng 1 năm 2012, 1:20:27 AM1/2/12

đến

Tôi sử dụng SubProcess.popen rất nhiều để chạy các lệnh shell từ Python. Không cần một tính năng Web2py cụ thể.

Đây là phương pháp tôi sử dụng bất cứ khi nào tôi cần gọi một cái gì đó: