Python - если строка в файле начинается с 16, то - PullRequest
0 голосов
/ 13 мая 2019

У меня есть скрипт, который проверяет мой IP-адрес на моем ПК и записывает его в файл на моем ПК - Это работает нормально

import socket
import sys
import requests
import urllib.request
import shutil
import subprocess
from time import sleep
import os
from os import system

# URL for download
URL = 'https://here/app.exe'

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 1))
local_ip_address = s.getsockname()[0]
sys.stdout = open("C:\\Temp\\nw_check.txt", "w+")
print(s.getsockname() [0])

Теперь я хотел бы сделать это следующим

Проверьте файл C: \ Temp \ nw_check.txt и, если IP-адрес в этом файле начинается с 116, 115, 117, затем загрузите вышеуказанное приложение с помощью прокси-сервера, который я установлю. Если оно начнется с чего-то еще, затем перейдите кскачать

if xxxxxx(xxxxxxxx()).startswith(('116', '115', '117')):
    r = requests.get(URL, stream=True, proxies={'http': 'http://proxy:6547', 'https': 'http://proxy:6547'})
else:
    r = requests.get(URL, stream=True)

Ответы [ 3 ]

1 голос
/ 13 мая 2019

sys.stdout = open ("C: \ Temp \ nw_check.txt", "w +")

print (s.getsockname () [0])

Почему вы устанавливаете файл на стандартный вывод, а затем печатаете вместо простой печати / записи непосредственно в файл?

with open("C:\\Temp\\nw_check.txt", "w+") as f:
    print(s.getsockname()[0], file=f)
    # of f.write(str(s.getsockname()[0])); f.write('\n')

Проверьте файл C: \ Temp \ nw_check.txt и еслиIP-адрес в этом файле начинается с 116, 115, 117

Почему вы просматриваете промежуточный файл?Почему бы просто не проверить результат s.getsockname() [0] напрямую?

Кроме этого: 1. Если вы используете приведенный выше код и ниже "с", или находитесь в другом файле, повторно откройтефайл в режиме r, прочитайте первые 3 символа и проверьте, что вы ищете:

with open("C:\\Temp\\nw_check.txt", "w+") as f:
    print(s.getsockname()[0], file=f)
with open(fname, 'r') as f:
    if f.read(3) in ('116', '115', '117'):
        # etc…
или 2, если вы используете свой исходный код или поместите его в текст with выше, ищите (0), чтобы переместить курсор назад к началу файла, затем прочитайте первые 3 символа и проверьте.
sys.stdout.seek(0)
if f.read(3) in ('116', '115', '117'):
    # etc…
0 голосов
/ 13 мая 2019

Некоторые варианты этого в соответствии с вашими потребностями должны работать:

with open("C:\\Temp\\nw_check.txt", "r") as input_file:
    for ip_address in input_file:
        if ip_address.startswith(("115", "116", "117")):
            r = requests.get(URL, stream=True, proxies={'http': 'http://proxy:6547', 'https': 'http://proxy:6547'})
        else:
            r = requests.get(URL, stream=True)

Поскольку ваш файл имеет только одну строку, цикл for будет запущен только один раз и завершится.

0 голосов
/ 13 мая 2019

просто откройте файл еще раз и прочитайте IP-адрес:

with open("C:\\Temp\\nw_check.txt", "r") as ip_file:
    ip_address = ip_file.readline()

if ip_address.startswith(("115", "116", "117")):
        # and so on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...