透過OS傳遞指令:這裡出了什麼問題?

2024-04-18 12:44:23 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我想创建一个简单的脚本,根据某个文件夹中包含的文件名创建目录。你知道吗

我的方法如下:

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])

因为某种原因我不能让命令工作。你知道吗

如果传入名为“Test Folder”的文件,则会出现如下错误:

mkdir: "/Users/soundteam/Desktop/PlayGround/Test Folder: No such file or directory

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

有人能给我指出正确的方向吗?你知道吗


Tags: pathtest脚本文件夹new文件名folderfilename
2条回答

你不需要双引号。subprocess将参数直接传递给进程,因此不需要为shell的解析做准备。您也不需要尾部斜杠,应该使用操作系统路径连接要组合路径组件,请执行以下操作:

path = os.path.join(destination, filename)

编辑:您应该接受@Fabian的答案,这说明您根本不需要子流程(我知道)。你知道吗

首先,应该使用os.path.join()将路径部分粘合在一起,因为它跨平台工作。你知道吗

此外,还有os.mkdiros.makedirs(这非常酷,因为它是递归的)之类的内置命令来创建文件夹。创建子流程成本很高,在这种情况下,这不是一个好主意。你知道吗

在您的示例中,您将双引号("destination/filename")传递给子进程,而不必这样做。如果在文件名或文件夹名中使用空格,则终端需要双引号,子进程将为您处理该问题。你知道吗

相关问题 更多 >