[英]Running batch command in Python script
我試圖在Python腳本中執行批處理命令,僅顯示PDF文件名。 基本上,Python腳本位於文件夾C:\\users\\me\\desktop\\python
,該文件夾應在桌面上的其他文件夾( C:\\users\\me\\desktop\\some-folder
)上執行命令。里面有PDF。
這是代碼:
from subprocess import call
import os
for root, dirs, files in os.walk("../some-folder"):
for pdf_file in files:
if pdf_file.endswith(".pdf"):
pdf_file_path = os.path.join(root, pdf_file)
os.chdir(root)
call('for %%f in (*.pdf) do @echo %%f')
我得到的結果是“找不到文件”。
首先,由於您正在激活內置的DOS命令,因此必須設置shell=True
來運行此類命令。
其次,即使這樣做也不起作用,因為腳本保留了兩倍的百分比。 內聯命令需要一個%
。
第三:不要使用os.chdir
,這是不好的做法。 最好使用subprocess
調用的cwd
選項,允許在運行命令時本地更改目錄。
那會工作:
call('for %f in (*.pdf) do @echo %f',shell=True,cwd=root)
當然這可能是一個例子,因為您的命令什么都不做:您不會在python腳本中返回輸出,也不檢查返回代碼...
如果您想在根目錄(具有完整路徑)中獲取python中*.pdf
的列表,我想您知道
list_of_pdfs = glob.glob(os.path.join(root,"*.pdf"))
或相對而言:
list_of_pdfs = [x for x os.listdir(root) if fnmatch.fnmatch(x,"*.pdf")]
但是由於您處於os.walk
循環中,因此您將獲得與.pdf文件一樣多的輸出,因此它的性能不是很高/設計不良且復雜。
對於您的整個轉換循環,我將為每個文件調用轉換器,不需要.bat腳本,您擁有python !:
from subprocess import call
import os
for root, dirs, files in os.walk("../some-folder"):
for pdf_file in files:
if pdf_file.endswith(".pdf"):
call([r"C:\xpdf\bin32\pdftotext","-raw",pdf_file], cwd=root)
在列表中傳遞參數會自動處理文件名中的空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.