باستخدام Subprocess.popen في Python مع ملف OS.TMP أثناء تمرير معلمات اختيارية
سؤال
أنا أكتب برنامج Python في Linux وفي جزء منه يعمل على تشغيل PDFtOtext قابل للتنفيذ لتحويل نص PDF. يرد الرمز الذي أستخدمه حاليًا أدناه.
pdfData = currentPDF.read()
tf = os.tmpfile()
tf.write(pdfData)
tf.seek(0)
out, err = subprocess.Popen(["pdftotext", "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
يعمل هذا بشكل جيد ، لكنني الآن أريد تشغيل PDFTOText قابل للتنفيذ مع خيار -layout (يحافظ على تخطيط المستند). حاولت استبدال " -" بالتخطيط ، واستبدال "pdftotext" بـ "pdftotext -layout" إلخ. انهم جميعا يعطيني نص فارغ. نظرًا لأن الإدخال يتم إنشاؤه عبر ملف Temp ، فإنني أواجه مشكلة في اكتشاف قائمة الوسيطة. تفترض معظم الوثائق على Popen أن جميع المعلمات يتم تمريرها من خلال قائمة الوسيطة ، ولكن في حالتي يتم تمرير الإدخال من خلال ملف temp.
أي مساعدة سيكون موضع تقدير كبير.
المحلول
هذا يعمل بالنسبة لي:
out, err = subprocess.Popen(
["pdftotext", '-layout', "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
على الرغم من أنني لم أتمكن من العثور على تأكيد واضح في صفحة الرجل ، أعتقد أن الأول -
يروي pdftotext
يتوقع PDF-file
ليأتي من stdin ، والثاني -
يروي pdftotext
يتوقع text-file
ليتم إرسالها إلى stdout.
نصائح أخرى
يمكنك تمرير الأمر الكامل في String with Shell = True:
out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()