2014-02-05 110 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