skrypt czeka aż zamkniemy okno

0

Witam serdecznie, poszukuję rozwiązania aby skrypt po uruchomieniu zaczekał aż zamkniemy okno w tym przypadku notatnika i po zamknięciu wykonała się reszta skryptu. Poszukiwałem podobnych rozwiązań ale niestety nic konkretnego nie znalazłem

import datetime
import sys
import webbrowser

filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.txt', 'w')
webbrowser.open(filename1 + '.txt')

# w tym miejscu skrypt powinien zaczekać na zamknięcie okna i po zamknięciu wykonać dalszą część czyli zliczyć ilość wpisanych linii w pliku

count = len(open(filename1 + '.txt', 'r').readlines())
print(count)
``` python
1
wizair napisał(a):

Witam serdecznie, poszukuję rozwiązania aby skrypt po uruchomieniu zaczekał aż zamkniemy okno w tym przypadku notatnika i po zamknięciu wykonała się reszta skryptu. Poszukiwałem podobnych rozwiązań ale niestety nic konkretnego nie znalazłem

import datetime
import sys
import webbrowser

filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(filename1 + '.txt', 'w')
webbrowser.open(filename1 + '.txt')

# w tym miejscu skrypt powinien zaczekać na zamknięcie okna i po zamknięciu wykonać dalszą część czyli zliczyć ilość wpisanych linii w pliku

count = len(open(filename1 + '.txt', 'r').readlines())
print(count)
``` python

Notatnika w sensie notepad.exe czy jakiś inny gedit? Bo tu widzę, że otwierasz notatnik modułem webbrowser który, jeśli dobrze rozumiem opis w dokumentacji, otwiera przeglądarkowy edytor dokumentu z podanego jako argument URLa....

Swoją drogą, po co przekierowujesz sys.stdout do tego pliku i to w kodzie, skoro potem edytujesz go (jak się domyślam) w edytorze, a w dodatku printujesz zawartość po otwarciu go ponownie? Już pomijam to, czy ten fragment zadziała, po prostu... po co?

Gdyby satysfakcjonowało Cię użycie jakiegoś powiedzmy dowolnego edytora plików tekstowych, to mógłbyś sie uciec do uruchomienia go poprzez moduł subprocess

import subprocess
import datetime

filename = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + ".txt"

subprocess.run(["gedit", filename])

subprocess.run czy podobna funkcja może czekać, aż wywołane polecenie się zakończy, co więcej pozwalają na przechwytywanie stdout, stderr, tworzenie pipe'ów i inne takie.

0

dzięki za podpowiedzi, cała treść zadania to :

Napisać skrypt, który po uruchomieniu utworzy w ustalonym folderze plik o rozszerzeniu .txt, z
nazwą wskazującą aktualną datę i godzinę w formacie najbardziej ułatwiającym sortowanie, po
czym otwiera go w notatniku i czeka na zakończenie działania procesu. Po zamknięciu notatnika
ścieżkę utworzonego pliku zachowujemy (przez dopisanie na końcu) w jednym z plików:
-puste.txt, jeśli utworzony plik nie zawiera żadnych danych,
-krótkie.txt, jeśli utworzony plik ma jedną linię,
-średnie.txt, jeśli utworzony plik ma najwyżej 10 linii,
-długie.txt, jeśli utworzony plik ma więcej niż 10 linii

import datetime
import subprocess

filename1 = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
f = open(filename1 + '.txt', 'w')
f.close()
notePath = r'C:\Windows\System32\notepad.exe'
filePath = r'C:\Users\Mateusz\PycharmProjects\foldery' + filename1 + '.txt'
p1 = subprocess.Popen("%s %s" % (notePath, filename1 + '.txt'))

p1.wait()

count = len(open(filename1 + '.txt', 'r').readlines())

if count == 0:
    f = open('puste.txt', 'a')
    f.write(filePath + '\n')
    f.close()
elif count == 1:
    f = open('krótkie.txt', 'a')
    f.write(filePath + '\n')
    f.close()
elif count <= 10:
    f = open('średnie.txt', 'a')
    f.write(filePath + '\n')
    f.close()
elif count > 10:
    f = open('długie.txt', 'a')
    f.write(filePath + '\n')
    f.close()

skrypt działa, ale proszę o jakieś sugestie co ewentualnie poprawić, dopiero zaczynam z pythonem i każda porada bd cenna

1

Hej, kilka uwag:
po pierwsze zamiast sztywnej ścieżki do pliku dałbym ścieżkę skryptu:

fileDir = os.path.dirname(os.path.abspath(__file__))
filePath = os.path.join(fileDir, filename1 + '.txt')

ścieżkę do notatnika w ogóle bym wyrzucił:

notePath = r'notepad.exe'
p1 = subprocess.Popen("%s %s" % (notePath, filePath)) 

staraj się nie powtarzać tego samego kodu przy każdym warunku:

if count == 0:
    filename = 'puste.txt'
elif count == 1:
    filename = 'krótkie.txt'
elif count <= 10:
    filename = 'średnie.txt'
else:
    filename = 'długie.txt'
f = open(filename, 'a')
f.write(filePath + '\n')
f.close()

1 użytkowników online, w tym zalogowanych: 0, gości: 1