我正在构建一个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执行它时,它不会。
答案 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.listdir
或os.walk
。)