gpt4 book ai didi

python - 模块操作系统和模块子进程之间的区别?

转载 作者:行者123 更新时间:2023-12-01 02:01:01 25 4
gpt4 key购买 nike

我在 Linux 中编写了一个脚本,通过 subprocess 模块动态自动复制到文件夹中:

import sys
import subprocess


script = sys.argv
name = str(script[0])
print name

for i in range(0,10):
fold = 'Lombriz'+str(i)
subprocess.call(['mkdir',fold])
subprocess.call(['cp',name,fold])

但是,当我尝试通过放置正确的 Windows 命令在 Windows cmd 中执行相同的脚本时,它会抛出以下错误:

Error: subprocess.call subprocess.call (['mkdir', fold])
[Error 2]: The system can not find the specified file.

之后,我必须使用模块 os.system 执行相同的脚本,它在 Windows 上完美运行。

我的问题是:子进程模块在 Windows 中不起作用吗?在 Windows 中只能使用 os.system 吗?

最佳答案

subprocess在 Windows 上运行得很好。

但是在任何平台上,subprocess都无法调用不存在的程序。 Windows 上没有名为 mkdir(或 MKDIR.EXE)的程序。当您在命令提示符中键入该命令时,cmd.exe 将其作为特殊的内置命令进行处理。

而且,即使它确实存在,您也不会调用它,因为从错误消息中您清楚地传递了 ' mkdir',并且在 m 之前有一个空格>,并且任何系统上都没有具有该名称的程序。

如果您阅读 subprocess 的文档,您会发现有两种方法可以解决此问题:

  • 传递shell=True,因此该命令将由shell(cmd.exe)执行,类似于os.system,但是以各种方式更好。通常,当您使用此标志时,您希望使用字符串而不是参数列表,例如 run(f'mkdir {fold}', shell=True)
  • 显式调用 cmd.exe,例如 run(['cmd', '/C', 'mkdir', Fold])

但是,实际上没有理由在这里使用 os.systemsubprocess。如果你想建立一个目录,只需调用 os.mkdir (或者,如果您想递归地执行此操作, os.makedirs 。这是跨平台的,并且尽可能简单。同样,不要在 Unix 上运行 cpcopy 在 Windows 上,您可以只 shutil.copyfile 或其变体。

关于python - 模块操作系统和模块子进程之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49621612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com