如何让shell理解通过subprocess.call()传递的通配符

时间:2015-09-03 01:24:45

标签: python

当我执行脚本时,我收到此错误:

['grep', 'PORTALSHARED', '*']
grep: *: No such file or directory

当我在shell上执行时,同样的命令工作正常。

以下是剧本:

a = shlex.split('grep PORTALSHARED *')
print a

for pdir, _, _ in os.walk(r'/Users/skandasa/perforce/projects/releases/portal-7651'):
   os.chdir(pdir)
   print os.getcwd()
   subprocess.call(a)

我尝试添加shell = True但没有效果。

1 个答案:

答案 0 :(得分:2)

*由shell扩展,因此如果您希望subprocess.call()对其进行处理,则需要传入shell=True。示例 -

a = 'grep PORTALSHARED *'
subprocess.call(a, shell=True)

请注意,使用shell=True时,您应该发送完整的字符串作为命令,而不是split版本。

但鉴于此,我认为你真的不需要os.chdir(),你可以尝试 -

a = 'grep PORTALSHARED {}'
for pdir, _, _ in os.walk(r'/Users/skandasa/perforce/projects/releases/portal-7651'):
   subprocess.call(a.format(pdir + '/*'), shell=True)