Python命令行执行

Python命令行执行,python,command-line-arguments,Python,Command Line Arguments,我正在尝试使用一个简单的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(comm

我正在尝试使用一个简单的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电脑,如果这对我有帮助的话

在终端中执行时,相同的命令也起作用

但它不是同一个命令。代码正在运行:

'mv' '*.pdf' 'test.pdf'
但当您键入它时,它会运行:

'mv' *.pdf 'test.pdf'

区别在于shell在执行mv之前将*通配符全局化。您可以使用模块模拟它的功能。

默认情况下,Python不会扩展字符串中的shell通配符。您也可以在不使用子流程的情况下执行此操作。但是您的代码将丢失除最后一个pdf文件之外的所有pdf文件

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

但我相信那不是你真正想要的。您需要一个更好的目的地名称。

谢谢您的快速回复!那么,我应该通过使用glob模块来实现这段代码吗?我查阅了文件,但不太明白。是否需要在子流程调用中指定glob.glob*.pdf?glob.glob返回一个列表。必须将其集成到传递给subprocess.call的列表中。该目录中有多少PDF文件?如果有多个shell命令,则该shell命令应该失败。您的权利。在我尝试该命令时,只有一个pdf。但我意识到重命名会失败不止一次,于是开始尝试将所有PDF移到另一个目录。无论如何谢谢你!