从Python调用命令行实用程序
我目前正试图利用strace自动跟踪程序的系统调用。然后,为了解析和处理获得的数据,我想使用Python脚本 我现在想知道,我该如何从Python中调用strace? Strace通常通过命令行调用,我不知道从Strace编译的任何C库可以使用 通过Python通过命令行模拟访问的一般方法是什么? 或者:有没有类似于用Python本机编写的strace的工具 我很感谢你的帮助从Python调用命令行实用程序,python,terminal,debian,strace,Python,Terminal,Debian,Strace,我目前正试图利用strace自动跟踪程序的系统调用。然后,为了解析和处理获得的数据,我想使用Python脚本 我现在想知道,我该如何从Python中调用strace? Strace通常通过命令行调用,我不知道从Strace编译的任何C库可以使用 通过Python通过命令行模拟访问的一般方法是什么? 或者:有没有类似于用Python本机编写的strace的工具 我很感谢你的帮助 没什么,因为我不懂您可以使用以下命令: import commands cmd = "strace command" r
没什么,因为我不懂您可以使用以下命令:
import commands
cmd = "strace command"
result = commands.getstatusoutput(cmd)
if result[0] == 0:
print result[1]
else:
print "Something went wrong executing your command"
result[0]
包含返回代码,result[1]
包含输出。您需要使用子流程
模块
它有check\u output
读取输出并将其放入变量,还有check\u call
只检查退出代码
如果要运行shell脚本,可以将其全部写入字符串并设置shell=True
,否则只需将参数作为字符串放入列表中即可
import subprocess
# Single process
subprocess.check_output(['fortune', '-m', 'ciao'])
# Run it in a shell
subprocess.check_output('fortune | grep a', shell=True)
请记住,如果您在shell中运行东西,如果您没有正确地转义并允许用户数据进入字符串,则很容易造成安全漏洞。最好不要使用Python2和Python3(3.5之前版本) 只需执行:
subprocess.call(["strace", "command"])
执行并返回要处理的输出:
output = subprocess.check_output(["strace", "command"])
参考:
Python 3.5+
output = subprocess.run(["strace", "command"], caputure_output=True)
参考资料:您知道python有一个
子流程
模块,完全不需要依赖其他库?子流程。检查输出('fortune | grep a',shell=True)
在那里,不再依赖无用的模块。