• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Python subprocess.run różnice w wykonywaniu

VPS Starter Arubacloud
0 głosów
152 wizyt
pytanie zadane 14 lutego w Python przez tubylec01 Obywatel (1,500 p.)
zamknięte 14 lutego przez tubylec01

Cześć,

Fragment kodu:

        try:
            print(f'Start pinging: {ip}')
            start_time = time()
            while self.result == 1 and time() - start_time < 10:
                print(f'Time: {time() - start_time}')
                if self.result == 0:
                    break
                sleep(1)
                x = ip.rsplit('.')[2]
                ip_s = f'192.168.{x}.248'
                ip_d = ip
                command = ['ping', '-S', f'{ip_s}', '-n', '2', f'{ip_d}']
                result = subprocess.run(command,
                                        timeout=timeout,
                                        # creationflags=0x08000000,
                                        creationflags=subprocess.DETACHED_PROCESS
                                        # stdout=subprocess.PIPE
                                        )
                print(f'Result: {result.returncode}')
                if result.returncode == 0 and b'TTL' in result.stdout:
                    self.ip = ip
                    self.result = 0
                    print(f'Win: {ip}')
                else:
                    self.result = 1

        except Exception as e:
            print(e)
            self.result = 1

Dlaczego jeśli uruchamiam ten skrypt jako skompilowany program do aplikacji - exe, to działa on inaczej niż plik wykonany przez interpreter?

Porównanie wyników:

Z pliku exe:

 

Z interpretera:

O co chodzi? Wykonanie z interpretera jest poprawne, dostaje odpowiedz "result" i próba jest wykonywana przez określony czas nie dłuższy niż 10 s, natomiast wersja exe nie daje żadnej odpowiedzi i nie próbuje powtarzać czynności przez określony czas 10 s.

Co może być przyczyną? 
Jeśli całość jest niezrozumiała postaram się doprecyzować problem.

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

0 głosów
odpowiedź 14 lutego przez VBService Ekspert (255,840 p.)

Sprawdź ustawienia firewall-a w systemie, interpreter python-a jak zgaduje ma dostęp do sieci, Twój exe już nie. wink

komentarz 14 lutego przez tubylec01 Obywatel (1,500 p.)

Dzięki za chęci ale to nie to (chyba).

Jako że staram się szukać odpowiedzi najpierw sam, potem ewentualnie jakieś forum + dalej szukam rozwiązania to znalazłem przyczynę. Rozchodzi się o jedną linię kodu, którą zamieniłem, jakiś spec od OS lub samego pythona pewnie będzie wiedział dlaczego tak jest ale idąc do brzegu to pomogło:

# command = ['ping', '-S', f'{ip_s}', '-n', '2', f'{ip_d}']'
command = f'ping -S {ip_s} -n 3 {ip_d}'

 

Podobne pytania

+1 głos
2 odpowiedzi 899 wizyt
pytanie zadane 30 grudnia 2018 w Python przez gunaterek Bywalec (2,760 p.)
0 głosów
2 odpowiedzi 197 wizyt
pytanie zadane 2 stycznia 2017 w Python przez Helmik Użytkownik (680 p.)
0 głosów
0 odpowiedzi 733 wizyt
pytanie zadane 8 marca 2023 w C i C++ przez Daniel338 Nowicjusz (120 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...