文件名、目录名或卷标语法不正确。

1 投票
1 回答
4714 浏览
提问于 2025-04-19 20:23

我正在尝试用一个Python脚本把一个文件准备好,上传到本地的Git仓库:

gitExe = r"C:\Git\bin\git.exe"
gitdir = r' --git-dir="G:\QA\.git"'
worktree = r' --work-tree="G:\QA\"'
gitcmd = " add"
myCsv = "Reports.csv"

import subprocess

print gitdir
print gitcmd
print gitExe

cmd = 'C:\\Git\\bin\\git.exe --git-dir="G:\\QA\\.git" --work-tree="G:\\QA" add Reports.csv' ####WORKS####
#cmd = ['C:\\Git\\bin\\git.exe --git-dir="G:\\QA\\.git" --work-tree="G:\\QA" add Reports.csv'] ####DOESNT WORK####
#cmd = ['C:\\Git\\bin\\git.exe --git-dir="G:\\QA\\.git" --work-tree="G:\\QA" add Reports.csv'+""] ####DOESNT WORK####
#cmd = [gitExe + gitdir + worktree + gitcmd + myCsv] ####DOESNT WORK####
p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
print cmd
print p.communicate()

当我把整个命令作为一个字符串传递(上面没有注释的那一行)时,一切都正常,但当我把它作为一个数组传递(上面三行被注释掉的)时,我就收到了以下错误信息:

>>> ================================ RESTART ================================
>>> 
 --git-dir="G:\QA\.git"
 add
C:\Git\bin\git.exe
['C:\\Git\\bin\\git.exe --git-dir="G:\\QA\\.git" --work-tree="G:\\QA\\" addReports.csv']
('The filename, directory name, or volume label syntax is incorrect.\r\n', None)

这是怎么回事呢?

1 个回答

1

当你把命令以数组的形式传递时,每个参数都必须是单独的元素。

cmd = ['C:\\Git\\bin\\git.exe', '--git-dir="G:\\QA\\.git"', '--work-tree="G:\\QA"',
    'add', 'Reports.csv']

数组中的第一个项目是程序的名字。在你的情况下,python试图把整个命令行当成程序的名字。

撰写回答