Python命令行执行

0 投票
2 回答
931 浏览
提问于 2025-04-17 01:28

我正在尝试用一个简单的Python脚本来重命名我桌面上的一组PDF文件。但我似乎没有成功。我的代码是:

import os,subprocess
path = "/Users/armed/Desktop/"
for file in os.listdir(path)
    command = ['mv', '*.pdf' , 'test.pdf']    // mv Command to rename files to test.pdf
    subprocess.call(command)

运行这段代码后,我得到的输出是1,但文件并没有被重命名。在终端中执行同样的命令却能正常工作。我使用的是Mac电脑(如果这有帮助的话)

2 个回答

1

默认情况下,Python不会自动处理字符串中的通配符,比如星号(*)这样的符号。你也可以不使用子进程来实现这个功能。不过,如果这样做,你的代码会把除了最后一个以外的所有PDF文件都丢掉。

from glob import glob
import os
path = "/Users/armed/Desktop/"
os.chdir(path)
for filename in glob("*.pdf"):
    os.rename(filename, "test.pdf")

但我相信这不是你真正想要的结果。你需要一个更好的目标文件名。

6

在终端执行时,同样的命令可以正常工作。

但实际上这不是完全相同的命令。代码运行的是:

'mv' '*.pdf' 'test.pdf'

但是当你自己输入时,它运行的是:

'mv' *.pdf 'test.pdf'

这两者的区别在于,命令行会在执行mv之前处理*这个通配符。你可以通过使用glob模块来模拟它的工作方式。

撰写回答