我目前正在开发一种分析命令输出的终端工具。
我在python中编写工具。
现在我想在每个命令中启动我的工具作为参数,例如:python program.py -analyse
在这种情况下,python program.py
是命令,我想用参数anaylse.py
启动我自己的项目-analyse
,该参数分析项目的输出并将自己的输出写入一份文件。现在我的问题是:
如何从参数analyse.py
启动我自己的程序-analyse
,如何捕获并阅读python program.py
的输出?
答案 0 :(得分:0)
添加-analyse作为参数会将其传递给program.py。我认为这不是你想要的。我想你正在寻找python program.py | python analyse.py
。然后只需读取stdin的输出。
将#!/usr/bin/python
扔在analyse.py的顶部,并将权限更改为可执行文件,使其更简单:python program.py | analyse.py
答案 1 :(得分:0)
argparse是用于处理命令行参数的标准库模块。我建议您按以下方式构建脚本参数:
选择一个字符,例如 class Stopwatch: NSObject {
private static var watches = [String:TimeInterval]()
private static func intervalFromMachTime(time: TimeInterval, useNanos: Bool) -> TimeInterval {
var info = mach_timebase_info()
guard mach_timebase_info(&info) == KERN_SUCCESS else { return -1 }
let currentTime = mach_absolute_time()
let nanos = currentTime * UInt64(info.numer) / UInt64(info.denom)
if useNanos {
return (TimeInterval(nanos) - time)
}
else {
return (TimeInterval(nanos) - time) / TimeInterval(NSEC_PER_MSEC)
}
}
static func start(name: String) {
var info = mach_timebase_info()
guard mach_timebase_info(&info) == KERN_SUCCESS else { return }
let currentTime = mach_absolute_time()
let nanos = currentTime * UInt64(info.numer) / UInt64(info.denom)
watches[name] = TimeInterval(nanos)
}
static func timeElapsed(name: String) {
return timeElapsed(name: name, useNanos: false)
}
static func timeElapsed(name: String, useNanos: Bool) {
if let start = watches[name] {
let unit = useNanos ? "nanos" : "ms"
print("*** \(name) elapsed \(unit): \(intervalFromMachTime(time: start, useNanos: useNanos))")
}
}
,以指明您希望通过工具运行的脚本的名称。这将通过以下方式调用:
f
然后你可以使用python program.py -f analyse.py
简单地执行argparse
参数之后指定的文件,并对输出做任何你想做的事。