Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: call functie en funtie vragen  (gelezen 2786 keer)

Offline daniel

  • Lid
Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #25 Gepost op: 2015/02/07, 18:26:00 »
Eric je maakt me blij, ik kan weer verder met ontwikkelen.
dankjewel

Ik ben begonnen in Python 3.4 te gaan programmeren en ik was bij een hoofdstuk beland van de functie def
waar ik wat moeite mee had.
Het is erg uitgebreide functie en daarom wilde ik hem graag eenvoudig leren om hem te begrijpen hoe die werkt.
Er is een begin en dat wilde ik delen om iedereen te bedanken die hier aan mee geholpen heeft.
Ook hoop ik nog advies te krijgen hoe ik dingen kan verbeteren of anders kan doen,,,,  bedankt.....

#!/usr/bin/env python3

from subprocess import call
import time
import os
import sys
import random

os.system('clear') # screen clear
def ipport(poort, acofdp): #acofdp is accept of drop
call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "-m", "tcp", "--dport", poort, "-j", acofdp))

def dropip(drop):
    call(("sudo", "iptables", "-A", "INPUT", "-s", drop, "-j", "DROP"))


def load(arg):
    call (("sudo", "apt-get", "install", "-y", arg))

x1 = input("kies:\n1 klant installatie\n2 Iptables\n3 nieuwe iedeen\n\nmaak een keuze: ")

if x1 == "1":
    load("k3b")
    load("qbittorrent")
# er volgen nog meer binnenkort
elif x1 == "2":
    call(("sudo", "iptables", "-F"))
    call(("sudo", "iptables", "-X"))
    call(("sudo", "iptables", "-P", "INPUT", "ACCEPT"))
    call(("sudo", "iptables", "-P", "FORWARD", "DROP"))
    call(("sudo", "iptables", "-P", "OUTPUT", "ACCEPT"))
    call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "!", "--syn", "-m", "state", "--state", "NEW", "-j", "DROP"))
    call(("sudo", "iptables", "-A", "INPUT", "-f", "-j", "DROP"))
    call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--tcp-flags", "ALL", "ALL", "-j", "DROP"))
    call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--tcp-flags", "ALL", "NONE", "-j", "DROP"))
    ipport("53", "ACCEPT")
    ipport("80", "ACCEPT")
    ipport("443", "ACCEPT")
    ipport("25", "ACCEPT")
    ipport("465", "ACCEPT")
    ipport("110", "ACCEPT")
    ipport("995", "ACCEPT")
    ipport("143", "ACCEPT")
    ipport("993", "ACCEPT")
    ipport("22", "ACCEPT")
    dropip("37.57.196.144/16") # Hacker uit Ukraine
    dropip("144.196.57.37/16") # Hostname Troilan.net
    dropip("114.37.0.69/16")   # Hacker uit Taiwan
    dropip("89.248.169.0/24")  # ECATEL LTD
    call (("sudo", "apt-get","install", "iptables-persistent"))
elif x1 == "3":
    print("Hier komt een nieuw iedee")
    pass
« Laatst bewerkt op: 2015/02/10, 21:22:24 door TopGear »

Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #26 Gepost op: 2015/02/08, 12:52:56 »
Goed dat je er mee verder bent gegaan. Heb nog wel een paar tips:

Ik zou niet de constructie from x import y gebruiken. In jouw huidige programma is het nog makkelijk te overzien maar stel dat je nog een module importeer met een call() functie? Je wilt toch wel aangeven waar die vandaan komt. Om tikwerk te besparen kun je ook een alias gebruiken:
import subprocess as sp
-knip-
sp.call(("sudo", "iptables", "-F"))

Waar je ook nog aan kan denken is het verder opsplitsen in functies. Bijvoorbeeld een functie install_packages() waar je het rijtje load() aanroepen inzet. Of een functie waar je alle iptables-regels onderbrengt. Vanuit het if-blok roep je dan alleen die hogere functies aan:

if x1 == "1":   
    install_packages()
elif x1 == "2":
    configure_iptables()
elif x1 == "3":
    print("Hier komt een nieuw iedee")   

En die pass onder print is overbodig :)

Tot slot zou je er nog voor kunnen kiezen om het resultaat van het input-commando al direct te converteren naar een integer met int(). Zie het eerste codevoorbeeld op deze pagina https://docs.python.org/3/tutorial/controlflow.html. In dat geval kun je ook afvangen of de gebruiker uberhaupt wel een cijfer heeft ingegeven als optie.

Maar laat je niet te veel afleiden door dit gezeur, ga gewoon lekker verder.

Offline daniel

  • Lid
Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #27 Gepost op: 2015/02/08, 13:23:52 »
dankjewel Erik voor je advies,
ik zal hiermee iets doen..   ;)

Erik, ik heb jou suggesties opgeslagen in Pseudotaal om zo mijn code te verbeteren.
Ik ga hier zeker iets mee doen.... thnx

ERIK:

De nieuwe code is als volgt:
#!/usr/bin/env python3


import subprocess as sp
import time
import os
import sys
import random

os.system('clear') # screen clear

# Input  defenities
def ipport(poort, acofdp): #acofdp is accept of drop
   sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "-m", "tcp", "--dport", poort, "-j", acofdp))


def dropip(drop):
    sp.call(("sudo", "iptables", "-A", "INPUT", "-s", drop, "-j", "DROP"))


def load(arg):
    sp.call (("sudo", "apt-get", "install", "-y", arg))
    pass

# Installaeren van de keuze menu

def install_packages():
    load("k3b")
    load("qbittorrent")




def install_iptables():
    sp.call(("sudo", "iptables", "-F"))
    sp.call(("sudo", "iptables", "-X"))
    sp.call(("sudo", "iptables", "-P", "INPUT", "ACCEPT"))
    sp.call(("sudo", "iptables", "-P", "FORWARD", "DROP"))
    sp.call(("sudo", "iptables", "-P", "OUTPUT", "ACCEPT"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "!", "--syn", "-m", "state", "--state", "NEW", "-j", "DROP"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-f", "-j", "DROP"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--tcp-flags", "ALL", "ALL", "-j", "DROP"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--tcp-flags", "ALL", "NONE", "-j", "DROP"))
    ipport("53", "ACCEPT")
    ipport("80", "ACCEPT")
    ipport("443", "ACCEPT")
    ipport("25", "ACCEPT")
    ipport("465", "ACCEPT")
    ipport("110", "ACCEPT")
    ipport("995", "ACCEPT")
    ipport("143", "ACCEPT")
    ipport("993", "ACCEPT")
    ipport("22", "ACCEPT")
    dropip("37.57.196.144/16") # Hacker uit Ukraine
    dropip("144.196.57.37/16") # Hostname Troilan.net
    dropip("114.37.0.69/16")   # Hacker uit Taiwan
    dropip("89.248.169.0/24")  # ECATEL LTD
    sp.call (("sudo", "apt-get","install", "iptables-persistent"))


# Keuze menu
x1 = input("kies:\n1 klant installatie\n2 Iptables\n3 nieuwe iedeen\n\nmaak een keuze: ")

# Beslissings opdrachten elif
if x1 == "1":
    install_packages()

elif x1 == "2":
    install_iptables()

elif x1 == "3":
    print("Hier komt een nieuw iedee")

else:
    pass

Hoe kan ik als je niet kiest tussen 1-3 de lus laten herhalen?
« Laatst bewerkt op: 2015/02/10, 21:16:12 door TopGear »

Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #28 Gepost op: 2015/02/08, 15:53:26 »
Hiervoor kun je while gebruiken.

show_menu = True
while show_menu:
    # hier jouw inputcommando en if-blok
    # 'uitdaging': zorg ervoor dat show_menu op False komt te staan bij het kiezen van 1-3 en anders op True.

En nogmaals: zou je de codetags kunnen gebruiken die dit forum biedt? Dat leest echt een stuk fijner voor code.

Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #29 Gepost op: 2015/02/08, 17:42:57 »
Kijk ook nog eens naar mijn code op de vorige pagina, deze gebruikt ook een lus. Directe link: https://forum.ubuntu-nl.org/index.php?topic=87561.msg940782#msg940782

Offline daniel

  • Lid
Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #30 Gepost op: 2015/02/08, 23:16:00 »
Dankjewel.

En wat bedoel je Erik met,

zou je de codetags kunnen gebruiken die dit forum biedt? Dat leest echt een stuk fijner voor code.
kun je me toelichten hierover

Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #31 Gepost op: 2015/02/08, 23:32:45 »
Dit bedoel ik

Offline daniel

  • Lid
Re: Python 3.4 vragen /antwoorden /ideenbus voor beginners
« Reactie #32 Gepost op: 2015/02/09, 08:15:05 »
Oké duidelijk thnx

Iedereen hartelijk dank voor jullie bijdragen.
Ik heb er weer zin in en Dankzij jullie zijn meer dingen duidelijk geworden.  Python is net als C++erg spannend en leuk om te doen. ..

"""Het menu herhalen heb ik als volgt opgelost:"""
show_menu = True
while show_menu:
    x1 = input("MENU:\n\n1= klant installatie\n2= Iptables\n3= nieuwe iedeen\nq= stoppen\nnmaak een keuze: ")
    if x1== "1":
        install_packages()
    elif x1 == "2":
        install_iptables()
    elif x1 == "3":
        print("hier komt een nieuw idee")
    elif x1 == "q":
        break
    else:
        print ("**** *** !!!!")
        pass

#!/usr/bin/env python3

import subprocess as sp
import time
import os
import sys
import random

os.system('clear') # screen clear

# Input  defenities
def ipport(poort, acofdp): #acofdp is accept of drop
   sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "-m", "tcp", "--dport", poort, "-j", acofdp))


def dropip(drop):
    sp.call(("sudo", "iptables", "-A", "INPUT", "-s", drop, "-j", "DROP"))


def load(arg):
    sp.call (("sudo", "apt-get", "install", "-y", arg))
    pass

# Installaeren van de keuze menu

def install_packages():
    load("k3b")
    load("qbittorrent")




def install_iptables():
    sp.call(("sudo", "iptables", "-F"))
    sp.call(("sudo", "iptables", "-X"))
    sp.call(("sudo", "iptables", "-P", "INPUT", "ACCEPT"))
    sp.call(("sudo", "iptables", "-P", "FORWARD", "DROP"))
    sp.call(("sudo", "iptables", "-P", "OUTPUT", "ACCEPT"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "!", "--syn", "-m", "state", "--state", "NEW", "-j", "DROP"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-f", "-j", "DROP"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--tcp-flags", "ALL", "ALL", "-j", "DROP"))
    sp.call(("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--tcp-flags", "ALL", "NONE", "-j", "DROP"))
    ipport("53", "ACCEPT")
    ipport("80", "ACCEPT")
    ipport("443", "ACCEPT")
    ipport("25", "ACCEPT")
    ipport("465", "ACCEPT")
    ipport("110", "ACCEPT")
    ipport("995", "ACCEPT")
    ipport("143", "ACCEPT")
    ipport("993", "ACCEPT")
    ipport("22", "ACCEPT")
    dropip("37.57.196.144/16") # Hacker uit Ukraine
    dropip("144.196.57.37/16") # Hostname Troilan.net
    dropip("114.37.0.69/16")   # Hacker uit Taiwan
    dropip("89.248.169.0/24")  # ECATEL LTD
    sp.call (("sudo", "apt-get","install", "iptables-persistent"))


# Keuze menu

show_menu = True
while show_menu:
    x1 = input("MENU:\n\n1= klant installatie\n2= Iptables\n3= nieuwe iedeen\nq= stoppen\nnmaak een keuze: ")
    if x1== "1":
        install_packages()
    elif x1 == "2":
        install_iptables()
    elif x1 == "3":
        print("hier komt een nieuw idee")
    elif x1 == "q":
        break
    else:
        print ("**** *** !!!!")
        pass
« Laatst bewerkt op: 2015/02/10, 21:21:23 door TopGear »

Offline TopGear

  • Forumteam
Re: call functie en funtie vragen
« Reactie #33 Gepost op: 2015/02/10, 21:12:02 »
Ik hem 'm even gesloten en ik ga eventjes wat schoonmaken.

Zo, fixed that for you.
« Laatst bewerkt op: 2015/02/10, 21:26:06 door TopGear »

Offline daniel

  • Lid
Re: call functie en funtie vragen
« Reactie #34 Gepost op: 2015/02/10, 23:19:48 »
Bedankt TopGear