2013-09-21 2 views
0

Я пытаюсь настроить сценарий, который перезаписывает файл интерфейсов, и в итоге он изменит ip-адрес на static, но когда я запустил его, я получаю сообщение об ошибке, которая читает «new_location_interfaces». truncate() ', и он говорит, что объект' str 'не имеет атрибута truncate.Синтаксис Python Truncate Error

from sys import argv 
from os.path import exists 
import os 

script_name = argv 

print "You are currently running %s" % script_name 
print "Version: 0.1" 
print """Desciption: This script will change the IP address of the 
Raspberry Pi from dynamic to static. 
""" 
print "If you don\'t want to continue, hit CTRL-C (^C)." 
print "If you do want that, hit RETURN" 

raw_input("?") 

# Main code block 

text_to_copy = """ 
auto lo\n 
iface lo inet loopback 
iface etho inet dhcp\n 
allow-hotplug wlan0 
iface wlan0 inet manual 
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf 
iface default inet dhcp 
""" 

if exists("/etc/network/interfaces"): 
    print "\nFile exists." 
    interfaces_file = open("/etc/network/interfaces", 'w') 
    print "Truncating/erasing contents . ." 
    interfaces_file.truncate() 
    print "Writing contents . ." 
    interfaces_file.write(text_to_copy) 
    interfaces_file.close() 
else: 
    print "\nCould not find the \'interfaces\' file." 
    print "Please specify the location:", 
    new_location_interfaces = raw_input() 
    open(new_location_interfaces, 'w') 
    print "Truncating/erasing contents . ." 
    new_location_interfaces.truncate() 
    print "Writing contents . ." 
    new_location_interfaces.write(text_to_copy) 
    new_location_interfaces.close() 

Я очень новичок в python, и мой код, вероятно, ужасен, но любая помощь будет оценена.

ответ

3

new_location_interfaces не является файловым объектом. Это строка, результат raw_input() вызова:

new_location_interfaces = raw_input() 

Следующая линия, open() вызов, не назначен ни к чему:

open(new_location_interfaces, 'w') 

Возможно, вы хотели укоротить что объект?

Например:

new_location_interfaces = raw_input() 
fh = open(new_location_interfaces, 'w') 
print "Truncating/erasing contents . ." 
fh.truncate() 
print "Writing contents . ." 
fh.write(text_to_copy) 
fh.close() 

Однако открытие файла для записи (режим установлен в w) уже обрезает файл, ваши .truncate() звонки полностью избыточными.

+0

Ahh Я вижу, и, конечно, он не работал! Что вы сказали прямо в конце, означает ли это, что я могу полностью удалить линию усечения? –

+0

@BobJones: да, вы можете полностью удалить строки '.truncate()'. –

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