簡體   English   中英

在Python腳本中運行批處理命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM