экспертов, проблема распространена, и я пытался на основе решений и примеров в SO, но все еще не могу записать вывод всех моих устройств в файл. У меня есть тест с использованием нескольких методов, и большую часть времени я получаю только последнюю строку в текстовом файле. Проблема ниже почти такая же, как у меня ... но мне не повезло.
Как удалить содержимое файла перед записью в него в скрипте Python?
Я тестирую скрипт для запуска конкретной команды в зависимости от типа устройства. Если устройства A запускают команду A, если устройства B запускают команду B, если устройство C запускает команду c. Список устройств в текстовом файле (список имеет тип и IP-адрес). Когда я использую 'w' содержимое файла только в последней строке, но когда я использую 'a', он сохранит все содержимое всех устройств в списке, но когда я снова запусту скрипт, он продолжит писать по последнему указателю итаким образом, я получил дублированный контент. содержимое в первый раз запускает скрипт следующим образом
OUTPUT CONTENT for device type A IP 192.168.100.100
OUTPUT CONTENT for device type A IP 192.168.100.110
OUTPUT CONTENT for device type B IP 10.1.10.100
OUTPUT CONTENT for device type C IP 10.2.10.10
OUTPUT CONTENT for device type C IP 10.2.10.11
OUTPUT CONTENT for device type C IP 10.2.10.12
при запуске скрипта второй раз ... файл содержит дубликаты следующим образом
OUTPUT CONTENT for device type A IP 192.168.100.100
OUTPUT CONTENT for device type A IP 192.168.100.110
OUTPUT CONTENT for device type B IP 10.1.10.100
OUTPUT CONTENT for device type C IP 10.2.10.10
OUTPUT CONTENT for device type C IP 10.2.10.11
OUTPUT CONTENT for device type C IP 10.2.10.12
OUTPUT CONTENT for device type A IP 192.168.100.100
OUTPUT CONTENT for device type A IP 192.168.100.110
OUTPUT CONTENT for device type B IP 10.1.10.100
OUTPUT CONTENT for device type C IP 10.2.10.10
OUTPUT CONTENT for device type C IP 10.2.10.11
OUTPUT CONTENT for device type C IP 10.2.10.12
скрипт выглядит следующим образом
#Define functions for each device_type
def type_A(ip):
return{
'device_type': 'A',
'ip': ip,
'username': 'usr10',
'password': 'password',
}
def type_B(ip):
return{
'device_type': 'B',
'ip': ip,
'username': 'usr10',
'password': 'password',
}
def type_C(ip):
return{
'device_type': 'C',
'ip': ip,
'username': 'usr10',
'password': 'password',
}
#Function to create output text file
def writeOutFile(outFileName, string):
with open(outFileName, "w") as f:
outfile = f.write(string)
#Open Text file that contain device type and ip address
deviceFile = open('devices.txt','r')
#Create list llist for each line in the file.
#The first item is the device type,
#The second item is the IP address
for line in deviceFile:
llist = line.split()
ipAd = llist[1]
#Check the first item of the list to determine device type and set
#variables
if llist[0] == 'A':
dvs = type_A(ipAd)
sendCommand = 'command for device type A'
elif llist[0] == 'B':
dvs = type_B(ipAd)
sendCommand = 'command for device type B'
elif llist[0] == 'C':
dvs = type_C(ipAd)
sendCommand = 'command for device type c'
else:
print("no valid device type")
break
dvs_connect = ConnectHandler(**dvs)
sendCommand = (dvs_connect.send_command(sendCommand))
#This print all the devices output on the terminal
print(sendCommand)
#Generate output file
outFileName = "outputFile.txt"
#function call to write the output string into a text file
writeOutFile(outFileName, sendCommand)
dvs_connect.disconnect()
deviceFile.close()
devices.txt list
A 192.168.100.100
A 192.168.100.110
B 10.1.10.100
C 10.2.10.10
C 10.2.10.11
C 10.2.10.12
outputFile.txt Выходной файл содержит только содержимое последней строки ... содержимое A и B уже перезаписано.
OUTPUT CONTENT for device type C IP 10.2.10.12
Я ожидаю, сколько раз я буду запускать скрипт, он будет перезаписывать существующее содержимое текстового файла, но не будет дублировать ... если у меня будет 6 устройств в моем списке devices.txt ... это означает, что у меня должно быть 6 выходных устройств в моем текстевыходной файлВыходной файл должен выглядеть примерно так:
OUTPUT CONTENT for device type A IP 192.168.100.100
OUTPUT CONTENT for device type A IP 192.168.100.110
OUTPUT CONTENT for device type B IP 10.1.10.100
OUTPUT CONTENT for device type C IP 10.2.10.10
OUTPUT CONTENT for device type C IP 10.2.10.11
OUTPUT CONTENT for device type C IP 10.2.10.12
Я действительно надеюсь, что кто-нибудь может мне помочь .. пожалуйста, помогите. Спасибо.