将命令传递给操作系统:这里有什么问题?

jam*_*ean 0 python bash operating-system

所以,我想创建一个简单的脚本来根据某个文件夹中包含的文件名创建目录.

我的方法看起来像这样:

def make_new_folders(filenames, destination):
    """
    Take a list of presets and create new directories using mkdir
    """
    for filename in filenames:
        path = '"%s/%s/"' %  (destination, filename)
        subprocess.call(["mkdir", path])
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我无法让命令工作.

如果我传入一个名为"测试文件夹"的文件,我会收到如下错误:

mkdir: "/Users/soundteam/Desktop/PlayGround/Test Folder: No such file or directory
Run Code Online (Sandbox Code Playgroud)

打印'path'变量会导致:"/ Users/soundteam/Desktop/PlayGround/Test Folder /"

谁能指出我正确的方向?

Fab*_*ian 7

首先,您应该使用os.path.join()将路径部件粘合在一起,因为它可以跨平台工作.

此外,还有内置命令,如os.mkdiros.makedirs(这很酷,因为它是递归的)来创建文件夹.创建子流程是昂贵的,在这种情况下,不是一个好主意.

在您的示例中,您将双引号("destination/filename")传递给子进程,您不必这样做.如果在文件或文件夹名称中使用空格,终端需要双引号,子进程会为您处理.