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

时间:2016-05-04 20:32:08

标签: python windows shell cmd subprocess

我正在尝试从外部驱动器运行Python脚本。该脚本运行正常,但当它到达行subprocess.call(callThis, shell=True)时,我收到错误(来自命令提示符)the filename, directory name, or volume label syntax is incorrect。当我从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)但是有相同的问题

1 个答案:

答案 0 :(得分:3)

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

subprocess.call(callThis,shell=True)