在Python脚本中运行批处理命令
问题描述:
我试图在Python脚本中执行批处理命令,只是显示PDF文件的名称。基本上,Python脚本位于文件夹C:\users\me\desktop\python
中,该文件夹应该在桌面上的其他文件夹(C:\users\me\desktop\some-folder
)上执行命令,该文件夹中包含PDF子文件夹。在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"):
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
,这是不好的做法。更好地使用cwd
选项subprocess
调用,允许在运行命令时在本地更改目录。
这将工作:
call('for %f in (*.pdf) do @echo %f',shell=True,cwd=root)
当然,这可能是因为你的命令的示例无所作为:你没有得到的输出回到你的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文件,所以它不是很高性能/糟糕的设计&复杂。
为您的整个转换循环我称之为转换器的每个文件,无需蝙蝠脚本,你有蟒蛇!:
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)
传递参数列表中会自动处理空格的文件名。
如果您已经使用python获得pdf名称,为什么要使用cmd.exe FOR命令重试它们?我不明白这是一个批处理文件问题。在这个问题中你确实没有批处理文件代码。 – Squashman