import subprocess import gradio as gr import tempfile import os def run_katana(url): try: # Create a temporary file to store the results with tempfile.NamedTemporaryFile(mode='w+', delete=False, suffix='.txt') as temp_file: # Run Katana and save output to the temporary file subprocess.run(["katana", "-u", url, "-o", temp_file.name], check=True) # Read the contents of the file temp_file.seek(0) result = temp_file.read() # Return the result and the path to the temporary file return result, temp_file.name except Exception as e: return str(e), None def process_and_display(url): result, file_path = run_katana(url) if file_path: return result, file_path else: return result, None iface = gr.Interface( fn=process_and_display, inputs="text", outputs=[ gr.Textbox(label="Crawl Results"), gr.File(label="Download Results", file_count="single") ], title="Katana Crawler", description="Enter a URL to crawl using Katana. Results will be displayed and available for download.", allow_flagging="never" ) iface.launch(server_name="0.0.0.0", server_port=7860)