我正在编写一个脚本来配置路由器,基本上它将是网页,它会将参数传递给python。目前它只是写入文件并使用exscript来通过ssh
进行编写例如,这是脚本的调色版本,它从网页接收参数后运行
python myscript.py 4 newfile.txt
(4和newfile是从网页收到的变量)
然后脚本就像
from sys import argv
script, vlanno, filename = argv
target = open(Filename, 'w')
vlanapply = (int vlan %r) %svino
target.write(vlanapply)
好的,所以这样可行,但问题在于输出数字4的反应是否为vlan no
它出现为int vlan'4'
然后当我尝试使用exscript使用conn.execute将其应用于cisco设备时,它会抛出无效的命令错误,其他非变量命令正常工作。
问题是命令是int vlan 4而不是int vlan'4'
我怎样才能摆脱''?
答案 0 :(得分:2)
%r
字符串格式使用repr
。如果参数是一个字符串,结果将用引号括起来,并像在交互式会话中一样进行转义。
您可能希望使用%s
代替str
来格式化参数。这将消除报价。
顺便说一句,如果您使用的是Python 2.7+(或Python 3+),您可以使用更好的语法来写入文件:
script, vlanno, filename = argv
with open(filename, 'w') as target:
print >> target, 'int vlan', vlanno # or print('int vlan', vlanno, file=target) in Python 3
答案 1 :(得分:1)
问题出在声明中:
vlanapply = (int vlan %r) %svino
%r
打印vino
代表的实际对象 - 在本例中为字符串。
将上述行替换为:
vlanapply = 'int vlan %s' % vino
这应该可以正常工作。
参考this问题,该问题可以很好地描述python中%r 和%s 指令
答案 2 :(得分:0)
int('4') should give you the integer 4 instead of the string '4'.