2016-11-02 61 views
0

我要執行的命令:蟒蛇未能執行Windows命令與發現

dir c: | find "File" 

的文件夾中的文件數量。

Neithor

subprocess.call(['dir c: | find "File"'], shell=True) 

subprocess.call(['dir', 'c:', '| find "File"'], shell=True) 

作品。

的Python翻譯該命令

'"dir c: | find \"file\""' 

引起的故障。

有沒有解決方法?

相關注意事項:http://www.cmi.ac.in/~madhavan/courses/prog2-2015/docs/python-3.4.2-docs-html/library/subprocess.html#notes

感謝

回答

2

如果您正在使用shell=True,你有望通過命令作爲一個字符串,它是由外殼(例如cmd在Windows上)執行期間解釋。將參數作爲列表傳遞僅適用於shell=False

嘗試簡單:所有的

subprocess.call('dir c: | find "File"', shell=True) 
+0

不幸的是,外殼= false時,它失敗,出現錯誤:FileNotFoundError:[WinError 2]系統找不到指定的文件 – 69444091

+0

@ 69444091,但盧卡斯告訴你使用'shell = True',除了使用字符串而不是列表。 'subprocess.list2cmdline'不知道如何將參數列表轉換爲cmd shell命令行。至於獲得'FileNotFoundError','dir'是cmd shell中的一個內置命令。使用'where.exe'命令來確定一個命令是否是一個外部可執行文件(例如'xcopy.exe')或內置於shell(例如'copy')中。 – eryksun

0

月1日,我沒能找到窗口「dir」命令,所以我不能用「殼=假」執行命令。 但它與

os.chdir('C:') 
cdirszbuf = os.popen('dir | find "File"') 
cdirinfo = cdirszbuf.readlines() 

由於工作

+0

在Python 3中'os.popen'只是用'shell = True'調用'subprocess.Popen',並將結果包裝到類文件類中。另外,AFAIK,從來沒有人告訴你使用'shell = False',而且我已經解釋過'dir'是一個內置的shell命令。沒有'dir.exe'來執行。你必須使用shell來支持這種命令行語法,比如''|''在兩個命令之間創建一個管道。 – eryksun