2013-08-17 2 views
-2

Я пишу скрипт для настройки маршрутизатора, в основном это будет веб-страница, и он передаст аргументы python. На данный момент это просто запись в файл и играть с exscript, чтобы получить его писать через SSHПроблема форматирования Python

Например это тонированное версия сценария после того, как она получает его аргументы с веб-страницы выполняется

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) 

нормально так что это работает, но проблема в том, Wi го выхода на номер 4 repersents ВЛС не

он выходит как INT ВЛС «4»

тогда, когда я пытаюсь применить это с помощью exscript с помощью conn.execute к сиг устройству он подбрасывает недопустимую ошибку команды другие непеременные команды работают нормально.

Проблема заключается команда INT ВЛС 4 не ИНТ ВЛС «4»

, как я могу избавиться от ' «?

+1

Как это может 'vlanapply = (интермедиат ВЛС% г)% svino' работы? –

+2

Вы должны опубликовать фрагменты фактического кода вместо некоторого нечетного псевдокода. – nneonneo

ответ

0
int('4') should give you the integer 4 instead of the string '4'. 
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

Проблема заключается в утверждении:

vlanapply = (int vlan %r) %svino 

%r печатает реальный объект, который представляет vino - в этом случае строки.

Замените эту строку с чем-то вроде:

vlanapply = 'int vlan %s' % vino 

Это должно работать правильно.

См this вопрос, который обеспечивает хорошее описание % г и % S директивы в питона

+0

Вы уверены, что '(int vlan% s)% vino' является допустимым синтаксисом Python? Что это делает? –

+1

Упс ... Ctrl-C, Ctrl-V ошибка :). Исправленный. –

Смежные вопросы