Я пытаюсь заменить первый символ в файле, чтобы в итоге я получил 1 или 0. Вот мой код:

import os

hostName = raw_input("IP: ")
communicate = open("communicate.txt", "w")

while True:
    response = os.system("ping " + hostName + " -c 1")
    if response == 0:
        # Replace first character with '1'
    else:
        # Replace first character with '0'

Я запускаю код в виртуальной машине Linux через терминал.

0
Kiva 27 Авг 2017 в 15:43

3 ответа

Лучший ответ

Кажется, это делает то, что вы хотите:

import os
import time

hostName = raw_input("IP: ")
communicateFd = os.open("communicate.txt", os.O_CREAT | os.O_RDWR)
communicate = os.fdopen(communicateFd, 'r+b')

while True:
    communicate.seek(0)
    response = os.system("ping " + hostName + " -c 1")
    if response == 0:
        communicate.write('1')
    else:
        communicate.write('0')
    time.sleep(1)

communicate.close()

Как отмечали другие, открытие в режиме 'w' приведет к обрезанию файла и уничтожению предыдущего содержимого, если оно есть.

Используя модуль os, мы можем немного больше контролировать, как открывается файл. В этом случае он создается только в том случае, если его не существует, а затем открывается в режиме чтения / записи.

В верхней части цикла мы seek в начале файла, что позволяет нам просто переписать первый байт столько раз, сколько необходимо.

Был добавлен оператор спящего режима, чтобы этот цикл не был узким, но его можно удалить, не влияя на файловый ввод-вывод.

0
Lex Scarisbrick 27 Авг 2017 в 13:34

Если вы хотите сохранить содержимое файла и заменить первый символ,
вы можете просто read файл, сохранить его содержимое (исключая 1-й символ) в переменной
и затем write в перезаписанном файле, например:

import os

hostName = raw_input("IP: ")

with open("communicate.txt", "r") as f:
    content = f.read()[1:]

while True:
    response = os.system("ping " + hostName + " -c 1")
    if response == 0:
        with open("communicate.txt", "w") as communicate:
            comunicate.write('1' + content)
    else:
        with open("communicate.txt", "w") as communicate:
            comunicate.write('0' + content)

Если вы хотите продолжать заменять 1-й символ, тогда вам нужно постоянно перезаписывать файл.
Я бы посоветовал, если это какая-то проверка, пусть код спит несколько секунд на каждой итерации цикла while, используя функцию sleep из модуля time Я надеюсь, что помог!

0
Johny Vaknin 27 Авг 2017 в 13:15
import os

hostName = raw_input("IP: ")
communicate = open("communicate.txt", "r+")
while True:
    response = os.system("ping " + hostName + " -c 1")
    if response == 0:
        text = communicate.read()
        communicate.write(str(1) + text[1:])
    else:
        text = communicate.read()
        communicate.write(str(0) + text[1:])
 communicate.close()
0
artona 27 Авг 2017 в 13:08