2012-03-21 119 views
2

我嘗試使用子模塊來執行以下命令(蟒蛇)find命令給出錯誤

/usr/bin/find <filepath> -maxdepth 1 -type f -iname "<pattern>" -exec basename {} \; 

但是,它提供了以下錯誤:

/usr/bin/find: missing argument to `-exec' 

我我猜這是爲了逃避某些角色。但沒有得到如何克服這一點。

任何幫助表示讚賞。謝謝。

+7

請提供的代碼,你如果OP是用單引號(''')的字符串啓動子 – wim 2012-03-21 06:28:01

回答

-2

記得逃逸"是必需的,也逃脫\還需要

;之前使用

您的命令可能看起來像:

p1 = subprocess.Popen(["/usr/bin/find", "<filepath> -maxdepth 1 -type f -iname \"<pattern>\" -exec basename {} \\;"]) 
p1.communicate() 
+0

行了,沒有必要逃跑雙引號。 – 2012-03-21 07:07:40

+0

謝謝。圍繞整個命令字符串的單引號起作用。 – shruthi 2012-03-21 09:18:02

+0

即使您成功了,您是否可以提供原始代碼@shruthi?你如何修復它? – isaaclw 2013-04-27 15:14:12

0

還有一個提示:使用語法r'bla」允許使用不必引用它們的反斜槓:

r'... -exec basename {} \;' 

提供更好的可讀性。

9

上的另一個問題的回答幫助: https://stackoverflow.com/a/15035344/971529

import subprocess 

subprocess.Popen(('find', '/tmp/mount', '-type', 'f', 
       '-name', '*.rpmsave', '-exec', 'rm', '-f', '{}', ';')) 

我無法弄清楚的事情是,分號並不需要進行轉義,因爲通常分號解釋由bash,並需要逃脫。

在bash這equivelent是:

find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \; 
+2

這適用於我。重點是 ';'選項。 – 2015-10-13 07:36:36