使用子进程在python 2.7中获取tail cmd输出

时间:2017-03-10 17:41:40

标签: python linux bash python-2.7 subprocess

我试图通过python来追踪文件的内容。我使用的代码如下

#! /usr/bin/python

import subprocess
import os.path

# Get the file path
filepath = os.path.join(baseDir,"filename.*" + uniqueId)
# Call subprocess and get last 10 lines from file
spTailFile = subprocess.Popen(["tail", "-10", filepath ], stdout=subprocess.PIPE)
tailOutput = spTailFile.communicate()[0]
print tailOutput

上面的代码会抛出如下错误:

tail: cannot open `/hostname/user/app/filename.*39102'

如果我直接在bash中使用filepath执行tail命令,我会看到输出。

tail -10 /hostname/user/app/filename.*39102

为什么子进程在执行tail命令时会传递额外的反引号(`)?

更新

我最终使用glob来查找@cdarke建议的文件,然后将其传递给Popen cmd。

1 个答案:

答案 0 :(得分:1)

Bash扩展了' *',Popen没有。

两种可能性: 1.在您的脚本中执行此操作并传递文件名而不使用' *' 2.创建一个Bash脚本并从python中调用它。