子過程與*
回答
import os
from subprocess import check_call
cmd = 'echo *' # some shell command that may have `*`
for dirname in filter(os.path.isdir, os.listdir(os.curdir)):
check_call(cmd, shell=True, cwd=dirname)
filter(os.path.isdir, os.listdir(os.curdir))
列表以點開始的當前目錄中包括的所有子目錄(.
)shell=True
執行給定的命令cmd
穿過外殼的字符串。*
如果存在被shell像往常一樣cwd=dirname
告訴命令應該在dirname
目錄執行擴展
它的工作原理與我想要的完全一樣,但爲什麼在[python docs](http://docs.python.org/library/subprocess.html#subprocess.check_call)中沒有關於'check_call'的cwd' arg。 – Adobe 2012-03-05 14:06:54
@Adobe:docs明確提到*「全功能簽名與[Popen構造函數](http://docs.python.org/library/subprocess.html#popen-constructor)相同 - 此函數通過所有提供的參數直接通過該接口。「* – jfs 2012-03-05 14:54:06
你也許有使用的glob
module?
>>> import glob
>>> glob.glob("*")
['build', 'DLLs', 'Doc', 'ez_setup.py', 'foo-bar.py', 'include', 'Lib', 'libs','LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'README.txt', 'Removesetuptools.exe', 'Scripts', 'selectitems.py', 'selectitems.pyc', 'setuptools-wininst.log', 'share', 'so_vector.py', 'tcl', 'Tools', 'w9xpopen.exe']
>>>
我知道glob,但我想給一個bash命令作爲python腳本的參數。 – Adobe 2012-03-05 14:01:04
既然你將不得不在shell中執行命令,讓殼做的擴展shell元字符。您可以運行:
sh -c "your_commaand -with *"
shell將爲您處理globbing並執行命令。
這留下了遍歷當前目錄的子目錄的問題。必須有一個Python模塊來做到這一點。
如果你決定你的程序應該chdir()
到子目錄,你必須小心處理每一個後回到起始目錄。另外,外殼可以處理,對你,也使用:
sh -c "cd relevant-subdir; your_command -with *"
這就避免了問題,因爲外殼是一個單獨的進程切換目錄,而影響你的主要的Python程序。
+1:它從來沒有發生過我 - 我可以把它餵給'bash -c'。 – Adobe 2012-03-05 14:04:28
- 1. 存儲過程中的SQL與子句
- 2. 與子查詢的存儲過程
- 3. 是否可以通過subprocess.Popen與子子進程進行通信?
- 4. 創建一個流通過數據通過子流程與streams2
- 5. 過程與AWK
- 6. 一個子過程
- 7. C - 孫子過程
- 8. 線程與子進程
- 9. IOError與子進程
- 10. 添加子層與過渡
- 11. 查詢過與子查詢
- 12. 過濾子集合與子查詢
- 13. 存儲過程與CTE查詢類別,子類別,子子類別
- 14. 過濾與query_post通過帖子ID
- 15. ORA-01427與過程
- 16. 與存儲過程
- 17. 過程與OpenCV的
- 18. 與存儲過程
- 19. 與存儲過程
- 20. SQL過程與LIKE
- 21. 叉子()和父母/子女過程
- 22. 子過程不讀PIPE
- 23. 通過argparse子流程
- 24. 子過程的Python錯誤
- 25. Python子過程(輸出PIPE)
- 26. 經過散列子程序
- 27. 子過程POPEN不pythonw.exe
- 28. Popen子過程異常
- 29. 存儲過程WHERE子句
- 30. 子過程POPEN功能
[Python命令行執行]的可能重複(http://stackoverflow.com/questions/7306178/python-command-line-execution) – 2012-03-03 16:19:12
實際上很難告訴如何解決您的問題,而無需看到一些代碼。 – 2012-03-03 16:27:59
@ IgnacioVazquez-Abrams:我不認爲這是重複的,因爲答案是一樣的。我們希望人們能夠搜索問題,而不是答案,對嗎? – 2012-03-03 17:04:57