2014-02-05 58 views
1

我正在构建一个python脚本,该脚本应该递归地添加perforce中的3个子文件并提交它们。下面是它的外观:在Python中递归地添加文件

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它不。

回答

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