ฉันจึงมีโครงการส่วนตัวซึ่งฉันรู้ว่าค่อนข้างไม่มีประสิทธิภาพแต่ได้ผล ฉันกำลังเขียนโค้ดหลามที่เรียกใช้ tesseract รุ่นที่ไม่ใช่ pip (ติดตั้ง apt ใน linux) รหัสของฉันทำงานบน linux แต่ฉันได้รับข้อผิดพลาดนี้บน windows:
FileNotFoundError: [WinError 2] ระบบไม่พบไฟล์
ระบุ: 'DRIVE_LETTER:\PROJECT_FOLDER\FOLDER/FILE.txt'
ฉันใช้ Atom IDE ซึ่งค่อนข้างใหม่สำหรับ python ดังนั้นถ้าใครสามารถชี้ข้อผิดพลาดงี่เง่าของฉันได้ ฉันจะขอบคุณมาก ขอบคุณ! ข้อผิดพลาดเกิดขึ้นที่ subprocess.run บรรทัดเนื่องจากไฟล์ error.txt แจ้งว่าไม่พบเส้นทางเฉพาะ
นี่คือรหัสของฉัน:
จากขวดนำเข้า Flask,url_for,redirect,render_template,request,send_file
จาก werkzeug.utils นำเข้า secure_filename
นำเข้ากระบวนการย่อย
แอป = กระติกน้ำ (__ชื่อ__)
app.config['UPLOAD_DIRECTORY']="อัปโหลด/"
app.config['FILE_NAME']=""
app.config['OUTPUT_DIRECTORY']="textresult/"
app.config['EXTENSION']=".txt"
@app.route("/",methods=["POST","GET"])
def to_upload():
err_msg=""
ถ้า request.method=="POST":
ถ้า request.files['fileupload']:
f=request.files['ไฟล์อัพโหลด']
ชื่อไฟล์=secure_filename(f.ชื่อไฟล์)
app.config['FILE_NAME']=ชื่อไฟล์
f.save(app.config['UPLOAD_DIRECTORY']+ชื่อไฟล์)
ส่งคืนการเปลี่ยนเส้นทาง (url_for ("process_upload", ชื่อไฟล์ = ชื่อไฟล์))
อื่น:
err_msg="ไม่ได้เลือกไฟล์!"
ส่งคืน render_template("index.html",error=err_msg)
@app.route("/upload/<filename>",methods=["POST","GET"])
def process_upload (ชื่อไฟล์):
f1=open("logs/out.txt","w")
f2=open("logs/error.txt","w")
out=subprocess.run([f"tesseract uploads/{filename}"+f" textresult/{filename}"],shell=True,stdout=f1,stderr=f2)
ส่งคืนการเปลี่ยนเส้นทาง (url_for ("output_file"))
@app.route("/result/",methods=["GET"])
def output_file():
ส่งคืน render_template("output.html")
@app.route("/ดาวน์โหลด/")
def download_file():
file=app.config['OUTPUT_DIRECTORY']+app.config['FILE_NAME']+app.config['EXTENSION']
ส่งกลับ send_file (ไฟล์ as_attachment = True)
ถ้า __name__=="__main__":
app.run(host="0.0.0.0",port="2000",debug=True)
แก้ไข:
ในที่สุดก็ใช้งานได้! ลบ / ใน app.config['UPLOAD_DIRECTORY'] และ app.config['OUTPUT_DIRECTORY'] ตั้งแต่ตอนนี้ฉันใช้ os.path.join และนี่คือบรรทัดต่อไปนี้สำหรับทั้ง Linux และ Windows ที่ฉันให้มันทำงาน:
ลินุกซ์:
to_convert=os.path.join(app.config['UPLOAD_DIRECTORY'],ชื่อไฟล์)
converter2txt=os.path.join(app.config['OUTPUT_DIRECTORY'],ชื่อไฟล์)
out=subprocess.run(["tesseract %s %s"%(to_convert,convert2txt)],shell=True,stdout=f1,stderr=f2)
หน้าต่าง:
to_convert=os.path.join(app.config['UPLOAD_DIRECTORY'],ชื่อไฟล์)
converter2txt=os.path.join(app.config['OUTPUT_DIRECTORY'],ชื่อไฟล์)
out=subprocess.run(["tesseract",to_convert,convert2txt],shell=True,stdout=f1,stderr=f2)
ขอขอบคุณทุกท่านสำหรับข้อมูลของคุณ!