我正在编写一个生成序列波形的函数,并希望让用户指定序列中每个正弦波的频率和持续时间。
我如何定义一个位置参数解析器,它可以以以下形式接受参数,这说明了每个开关传递的顺序?:
waveSequence.py --sine 440 1 --silence 0.5 --sine 110 2
(这将产生一个440Hz的正弦信号,持续1秒,然后是0.5秒的沉默,然后是110Hz的正弦信号,持续2秒)
这样的开关有可能回收吗?
解决这个问题的一种方法可能是按位置读取参数。在bash中,我可以这样做:
if [ $1 -eq 'sine' ]; then
freq=$2
time=$3
shift
shift
shift
# Next, continue reading from 4th argument
elif [ $1 -eq 'silence' ]; then
# no freq, only time
time=$2
shift
shift
else
# other waveforms
fi
如何在Python中移动位置参数?
您也可以使用sys.argv
作为原始参数字符串。
import sys
print sys.argv
$ python waveSequence.py—sin440 1—沉默0.5—sin110 2[' waveSequence.py ',"——正弦","440","1","——沉默","0.5","——正弦","110","2")
我相信,没有办法使位置--option
参数。可能的方法是使用带有常规位置参数的关键字,例如
$ waveSequence.py sin -440-1 silence-0.5 sin -110-2代码:
from argparse import ArgumentParser
parser = ArgumentParser(description="wave sequence generation")
parser.add_argument("waves", type=str, nargs="+")
args = parser.parse_args()
for arg in args.waves:
(type, spec) = arg.split("-", 1)
if type == "sine":
(freq, duration) = spec.split("-")
print "Playing sine wave with frequency %s for %ss" % (freq, duration)
elif type == "silence":
duration = spec
print "Silence for %ss" % duration
输出:播放频率440的正弦波,持续15秒0.5s沉默