2011-09-05 130 views
0

我想用一個簡單的python腳本在我的桌面上重命名一組pdf文件。我有點不太成功。我目前的代碼是:Python命令行執行

import os,subprocess 
path = "/Users/armed/Desktop/" 
for file in os.listdir(path) 
    command = ['mv', '*.pdf' , 'test.pdf'] // mv Command to rename files to test.pdf 
    subprocess.call(command) 

我得到的代碼輸出是1,文件沒有重命名。在終端中執行相同的命令。我正在使用Mac(如果有任何幫助)

+0

該目錄中有多少個PDF文件?如果有多個shell命令,則該命令應該失敗。 – Keith

+0

你的權利。當我嘗試命令時,只有一個pdf。但意識到重命名將失敗多於一個,並開始嘗試將所有的PDF移動到另一個目錄。 – Amritha

回答

6

相同的命令在終端中執行時有效。

除了它是不是相同的命令。運行該代碼:

'mv' '*.pdf' 'test.pdf' 

但是當你鍵入它運行:

'mv' *.pdf 'test.pdf' 

不同的是,外殼執行mv之前水珠的*通配符。您可以使用glob模塊來模擬它的功能。

+0

感謝您的快速回復!那麼我應該通過使用glob模塊來使這個代碼工作嗎?我查閱了文檔,但不太明白。是否需要在子進程調用中指定glob.glob(*。pdf)? – Amritha

+1

'glob.glob()'返回一個列表。你必須將它集成到你傳遞給'subprocess.call()'的列表中。 –

+0

非常感謝!它的工作:) – Amritha

1

Python不會在默認情況下擴展字符串中的shell通配符。您也可以在沒有子進程的情況下執行此操作。但是你的代碼將會丟失除最後一個之外的所有pdf文件。

from glob import glob 
import os 
path = "/Users/armed/Desktop/" 
os.chdir(path) 
for filename in glob("*.pdf"): 
    os.rename(filename, "test.pdf") 

但我確定這不是你真正想要的。你需要一個更好的目的地名稱。

+0

我實際上在尋找方法來通過python執行命令行指令。不管怎麼說,還是要謝謝你 ! – Amritha