使用python递归添加perforce中的文件

时间:2014-02-05 22:31:48

标签: python

我正在构建一个python脚本,该脚本应该以递归方式从perforce中的3个子目录中添加文件并提交它们。这是它的外观:

wksp = "myworkspace"


subprocess.Popen("dir /b /s /a-d | p4 -c " + wksp + " -x - add")

这是错误跟踪:

Traceback (most recent call last):
  File "v2_PEP8.py", line 286, in <module>
    p4()
  File "v2_PEP8.py", line 226, in p4
    subprocess.Popen("dir /b /s /a-d | p4 -c " + wksp + " -x - add")
  File "C:\Programs\python\App\lib\subprocess.py", line 711, in __init__
    errread, errwrite)
  File "C:\Programs\python\App\lib\subprocess.py", line 948, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

如果我打印出整个命令并将其粘贴到命令行中就可以了,但由于某些原因,当脚本通过subprocess.Popen执行它时,它不会。

1 个答案:

答案 0 :(得分:2)

问题是subprocess.Popen期望调用进程。没有dir可执行文件;它是cmd.exe shell内部识别的命令。

subprocess.Popen("cmd.exe /c dir /s /a-d")应该可以工作,但您可能需要捕获输出并自行重定向。

您也可以尝试os.system("dir /b /s /a-d | p4 -c " + wksp + " -x - add"),它应该在系统shell中调用整个命令。

(当然,由于您使用的是Python,因此无需使用dir来获取文件列表;而是可以使用os.listdiros.walk。)