python - 来自外部驱动器的 Subprocess.call()

标签 python windows shell cmd subprocess

我正在尝试从外部驱动器运行 Python 脚本。脚本运行正常,但当它到达 subprocess.call(callThis, shell=True) 行时,我收到错误(来自命令提示符)文件名、目录名或卷标语法不正确。当我从 C 驱动器运行相同的脚本时,它工作正常并复制了文件。 Python 安装在 C 盘,外置驱动器如果重要的话是 microSD 卡。 Python 版本是 3.4,但它也需要在 Python 2.7 上运行。

相关代码:

paths = [os.path.join(dirpath, fname) for dirpath, __, fnames in os.walk('.\\MUSIC') for fname in fnames]
for path in paths:
    pathcomp = path.replace('.\\MUSIC', 'C:\\redacted\\Music\\MUSIC')
    if not os.path.isfile(pathcomp):
        abspath = os.path.abspath(path)
        callThis = 'copy "'+abspath+'" "'+os.path.dirname(pathcomp)+'"'
        print(callThis)
        subprocess.call([callThis], shell=True)

打印 callThis 输出类似于

copy "G:\MUSIC\dir1\dir2\fname.mp3" "C:\redacted\Music\MUSIC\dir1\dir2\fname.mp3"

在命令提示符中输入确切的行可以正常工作并复制文件。

我认为问题与命令提示符从 C 驱动器而不是外部驱动器运行有关。我怎样才能让它用完外部驱动器(在 python 脚本中显示 G:/> 而不是 C:\?我试过 `subprocess.call('G :', shell=True) 但有同样的问题。

最佳答案

将列表传递给 subprocess.call 会覆盖 shell 标记化规则。您应该将字符串传递给 call 函数。

subprocess.call(callThis,shell=True)

关于python - 来自外部驱动器的 Subprocess.call(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037483/

相关文章:

python - 带/不带参数的 Django 管理命令

c# - 从线程信息中获取模块名称

windows - Chef 无法在 Windows 上找到 crypto_data_bag_secret

linux - Grep UNIX 精确单词

c - 使用组合管道和重定向编写 C Shell

python - Python 中 "inspect"和 "interactive"命令行标志的区别

python - 在 Telit GE-865 模块上用 Python 创建 QR 码

python - 如何让 scrapy 蜘蛛根据 Tornado 请求多次运行

bash - 如何在 Bash 中测试命令的非零退出状态?

windows - 将 Subversion 提交消息转换为 Unicode