-2

我正在编写一个脚本来配置路由器,基本上它将是网页,并将参数传递给 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'

我怎样才能摆脱''?

4

3 回答 3

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
于 2013-08-17T18:33:23.990 回答
1

问题出在声明中:

vlanapply = (int vlan %r) %svino

打印代表的%r实际对象vino- 在本例中为字符串。

用类似的东西替换上面的行:

vlanapply = 'int vlan %s'  % vino

这应该可以正常工作。

请参阅问题,该问题很好地描述了python中的%r%s指令

于 2013-08-17T18:34:40.057 回答
0
int('4') should give you the integer 4 instead of the string '4'.
于 2013-08-17T18:31:49.190 回答