我认为您遇到了两个问题:
- 这个电话:
p = subprocess.Popen(['grep', "%s *.log"%userid]...
除非
shell=True将参数列表直接传递给
os.execvp,否则它将无法按预期工作,这要求每个项目都是代表参数的单个字符串。您已经将
两个单独的参数 压缩到一个字符串中(换句话说,grep将“
foo12 *.log”解释为要搜索的 模式 ,而不是模式+文件列表)。
您可以通过以下方式解决此问题:
p = subprocess.Popen(['grep', userid, '*.log']...)
- 第二个问题是,再次没有
shell=True
,execvp
您*.log
将不知道您的意思并将其直接传递给grep,而无需通过外壳的通配符扩展机制。如果您不想使用shell=True
,则可以执行以下操作:import glob
args = [‘grep’, userid]
args.extend(glob.glob(‘*.log’)
p = subprocess.Popen(args, …)



