Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python strace输出处理_Python_Bash_Sed_Strace - Fatal编程技术网

Python strace输出处理

Python strace输出处理,python,bash,sed,strace,Python,Bash,Sed,Strace,我以这种方式使用strace: 然后我通过sed获得了清晰的文件列表: 有一个输出示例: /usr/share/locale langpack/en.utf8/LC_MESSAGES/gcc-4.6.mo /usr/share/locale langpack/en.UTF-8/LC_MESSAGES/gcc-4.6.mo /usr/share/locale langpack/en.utf8/LC_MESSAGES/grep.mo /usr/share/locale langpack/en.U

我以这种方式使用strace:

然后我通过sed获得了清晰的文件列表:

有一个输出示例:

/usr/share/locale langpack/en.utf8/LC_MESSAGES/gcc-4.6.mo
/usr/share/locale langpack/en.UTF-8/LC_MESSAGES/gcc-4.6.mo
/usr/share/locale langpack/en.utf8/LC_MESSAGES/grep.mo
/usr/share/locale langpack/en.UTF-8/LC_MESSAGES/grep.mo
/usr/share/locale langpack/en.utf8/LC_MESSAGES/make.mo
/usr/share/locale langpack/en.UTF-8/LC_MESSAGES/make.mo
/usr/share/locale/locale.alias
/usr/share/misc/magic.mgc
/usr/x86_64-linux-gnu/lib64/libc_r.a
/usr/x86_64-linux-gnu/lib64/libc_r.so
/usr/x86_64-linux-gnu/lib64/libsendfile.a
/usr/x86_64-linux-gnu/lib64/libsendfile.so
/usr/x86_64-linux-gnu/lib64/libtruerand.a
/usr/x86_64-linux-gnu/lib64/libtruerand.so
/usr/x86_64-linux-gnu/lib64/libuuid.a
/usr/x86_64-linux-gnu/lib64/libuuid.so
util.c
util_cfgtree.c
./utilcfgtree.h
util_cfgtree.h
util_cfgtree.i
./utilcfgtree.lo
util_cfgtree.lo
util_cfgtree.loT
util_cfgtree.o
util_cfgtree.s
util_charset.c
./util_charset.h
我的问题是非全名条目(例如“util.c”或“/util_cfgtree.h”)。 有没有办法在strace输出中获取全名

我写了这个脚本:

#!/usr/bin/python
# coding=UTF8
import subprocess
import os

fileList = []
for dirname, dirnames, filenames in os.walk(os.path.abspath('.')):
    for filename in filenames:
        fileList.append(os.path.join(dirname, filename))

straceProcess = subprocess.Popen("strace -s 1000 -xf -o out_configure.sed.log ./configure".split(), stdout=subprocess.PIPE).communicate()[0]
straceProcess2 = subprocess.Popen("strace -s 1000 -xf -o out_make.sed.log make".split(), stdout=subprocess.PIPE).communicate()[0]


f = open("out_configure.sed.log", "r+")
n = open("out_make.sed.log", "r+")

lines = []
for l in f:
    lines.append(l)
for l in n:
    lines.append(l)

f.close()
n.close()

pids = {}

filesInUse = []
currentDir = os.path.abspath('.')
for line in lines:
    parts = line.split()

if not pids.has_key(parts[0]):
    pids[parts[0]] = currentDir

if parts[1].startswith("clone"):
    pid = parts[parts.__len__() - 1]
    if not pids.has_key(pid):
        pids[pid] = os.path.abspath(pids.get(parts[0]))


elif parts[1].startswith("chdir"):
    if parts[1].split("\"")[1].startswith("/"):
        pids[parts[0]] = os.path.abspath(parts[1].split("\"")[1])

    elif parts[1].split("\"")[1].startswith("."):
        pids[parts[0]] = os.path.abspath(pids.get(pids[parts[0]]) + '/' + parts[1].split("\"")[1])
    else:
        pids[parts[0]] = os.path.abspath(pids.get(parts[0]) + '/' + parts[1].split("\"")[1])

elif parts[1].startswith("open("):
    if parts[1].split("\"")[1].startswith("/"):
        filesInUse.append(os.path.abspath(parts[1].split("\"")[1]))
    elif parts[1].split("\"")[1].startswith("."):
        filesInUse.append(os.path.abspath(pids.get(parts[0]) + '/' + parts[1].split("\"")[1]))
    else:
        filesInUse.append(os.path.abspath(pids.get(parts[0]) + '/' + parts[1].split("\"")[1]))


for l in filesInUse:
    if l in fileList:
        fileList.remove(l)

for l in fileList:
    print  l
但是我对Python的知识很差


是否存在任何错误或错误的解决方案?

这些是与您正在制作的应用程序相关的本地文件

您可以将该列表解析为另一个文件,然后查找以/开头或不以/开头的任何内容,并在脚本中进行查找以映射路径

在下面的示例中,我正在构建apache,这些文件出现在一个隐藏文件夹中(其构建过程的一部分在服务器文件夹中)

E2A: 这是一个可以满足您需要的单行程序:

 command="sed -n 's/.*open(\"\(.*\)\".*)\s*=.*/\1/p' out_configure.log out_make.log | sort -u"; echo "remote: " && echo $command| /bin/sh|grep "^/" ;echo "______________________"; echo "local" && echo $command|/bin/sh|grep -v "^/" |xargs -I {}   find . -name  {} -print

这些是与您正在制作的应用程序相关的本地文件

您可以将该列表解析为另一个文件,然后查找以/开头或不以/开头的任何内容,并在脚本中进行查找以映射路径

在下面的示例中,我正在构建apache,这些文件出现在一个隐藏文件夹中(其构建过程的一部分在服务器文件夹中)

E2A: 这是一个可以满足您需要的单行程序:

 command="sed -n 's/.*open(\"\(.*\)\".*)\s*=.*/\1/p' out_configure.log out_make.log | sort -u"; echo "remote: " && echo $command| /bin/sh|grep "^/" ;echo "______________________"; echo "local" && echo $command|/bin/sh|grep -v "^/" |xargs -I {}   find . -name  {} -print

我认为为了做到这一点,您还需要跟踪
chdir()
系统调用。后期处理将更加复杂,您可能需要切换到
awk
perl
python
或其他方式进行后期处理,因为您需要解释每个
chdir()
以跟踪当前工作目录的更改,然后,对于
open()
调用是相对的或本地的(即不是完整的路径),您需要预先设置当前路径,并对
。/
等进行任何调整。

我认为,为了做到这一点,您还需要跟踪
chdir()
系统调用。后期处理将更加复杂,您可能需要切换到
awk
perl
python
或其他方式进行后期处理,因为您需要解释每个
chdir()
以跟踪当前工作目录的更改,然后,对于
open()
如果调用是相对的或本地的(即不是完整路径),则需要预先设置当前路径,并对
。/
等内容进行任何调整。

strace
在系统调用时记录这些调用。如果程序要求
打开(“util_charset.c”,…)
,则将记录该名称。您需要知道进程的当前目录才能解释相对路径名(包括
open(“subdir/file.c”,…)
)。为此,您需要知道流程的当前目录——流程启动时的目录和流程运行期间所做的任何更改。如果您有两个目录,例如,一个程序源代码的旧版本和新版本,则可能无法从
strace
输出中说出跟踪了哪个构建。
strace
在进行系统调用时记录系统调用。如果程序要求
打开(“util_charset.c”,…)
,则将记录该名称。您需要知道进程的当前目录才能解释相对路径名(包括
open(“subdir/file.c”,…)
)。为此,您需要知道流程的当前目录——流程启动时的目录和流程运行期间所做的任何更改。如果您有两个目录,例如,一个程序源代码的旧版本和新版本,那么可能无法从
strace
输出中说出跟踪了哪个构建。
find . -name vhost.o
./server/.libs/vhost.o
./server/vhost.o

ls  server/.libs/
config.o      core_filters.o  eoc_bucket.o    exports.o        libmain.a   listen.o  main.o        protocol.o  request.o     util_cfgtree.o  util_debug.o   util_filter.o  util.o       util_script.o  util_xml.o
connection.o  core.o          error_bucket.o  gen_test_char.o  libmain.la  log.o     mpm_common.o  provider.o  scoreboard.o  util_charset.o  util_ebcdic.o  util_md5.o     util_pcre.o  util_time.o    vhost.o
 command="sed -n 's/.*open(\"\(.*\)\".*)\s*=.*/\1/p' out_configure.log out_make.log | sort -u"; echo "remote: " && echo $command| /bin/sh|grep "^/" ;echo "______________________"; echo "local" && echo $command|/bin/sh|grep -v "^/" |xargs -I {}   find . -name  {} -print