Subprocess Fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SyntoxicTech
User
Beiträge: 3
Registriert: Samstag 5. September 2015, 15:19

Moin Leute,
ich versuche mich gerade an Python. Mich interessiert so was und da habe ich mich entschlossen Python zu lernen. Gerade versuche ich ein kleines Terminal Programm zu schreiben, indem ich meine VPN Server auswählen kann. Die Shell Dateien funktionieren, aber der Start von der Datei nicht. Habe ich mich falsch informiert oder fehlt da nur eine kleine Ergänzung?

Script:

Code: Alles auswählen

#!/usr/bin/env python
import subprocess

print("VPN Server Wahl")
print("")
print("1. Deutschland - 2. England - 3. Japan - 4. Mexico - 5. Netherlands - 6. Polen - 7. Schweden - 8. Schweiz - 9. USA")
inp = input()
if inp == 1:
	subprocess.Popen([".", "/home/toxic/CyberGhost/GER.sh"])
elif inp == 2:
	subprocess.Popen([".", "/home/toxic/CyberGhost/ENG.sh"])	
elif inp == 3:
	subprocess.Popen([".", "/home/toxic/CyberGhost/JAP.sh"])	
elif inp == 4:
	subprocess.Popen([".", "/home/toxic/CyberGhost/MEX.sh"])	
elif inp == 5:
	subprocess.Popen([".", "/home/toxic/CyberGhost/NETH.sh"])	
elif inp == 6:
	subprocess.Popen([".", "/home/toxic/CyberGhost/POL.sh"])	
elif inp == 7:
	subprocess.Popen([".", "/home/toxic/CyberGhost/SCHWED.sh"])	
elif inp == 8:
	subprocess.Popen([".", "/home/toxic/CyberGhost/SCHWEIZ.sh"])	
elif inp == 9:
	subprocess.Popen([".", "/home/toxic/CyberGhost/USA.sh"])	

else: print("ERROR - Falsche Eingabe - Abbruch")

Code: Alles auswählen


toxic@laboratory:~/Schreibtisch$ ./VPN.py
VPN Server Wahl

1. Deutschland - 2. England - 3. Japan - 4. Mexico - 5. Netherlands - 6. Polen - 7. Schweden - 8. Schweiz - 9. USA
1
Traceback (most recent call last):
  File "./VPN.py", line 9, in <module>
    subprocess.Popen([".", "/home/toxic/CyberGhost/GER.sh"])
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 13] Permission denied
Achso System ist Ubuntu 15.04

MfG SyntoxicTech
nezzcarth
User
Beiträge: 1631
Registriert: Samstag 16. April 2011, 12:47

Das Problem ist der Punkt, der hier vmtl. nicht das bedeutet, was du beabsichtigst. Lass den weg.

Ansonsten könntest du noch deine ganzen Unterscheidungen in einem Dictionary verpacken.
Zuletzt geändert von nezzcarth am Sonntag 6. September 2015, 12:13, insgesamt 2-mal geändert.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich hab den Code für dich mal aufbereitet (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python
import subprocess
import os.path
 

BASE_PATH = '/home/toxic/CyberGhost/'
SERVERS = [
    ('Deutschland', 'GER.sh'),
    ('England', 'ENG.sh'),
    ('Japan', 'JAP.sh'),
    ('Mexico', 'MEX.sh'),
    ('Niederlande', 'NETH.sh'),
    ('Polen', 'POL.sh'),
    ('Schweden', 'SCHWED.sh'),
    ('Schweiz', 'SCHWEIZ.sh'),
    ('USA', 'USA.sh')
]


def get_valid_number(numbers, prompt='', error='Falsche Eingabe'):
    while True:
        i = None
        try:
            i = int(input(prompt))
        except ValueError:
            pass

        if i is None or i not in numbers:
            print(error)
        else:
            return i


def main():
    print('VPN Server Wahl:')
    for i, name, sh in enumerate(SERVERS, 1):
        print('\t{}. {}'.format(i, name))

    valid_inputs = list(range(1, len(SERVERS)+1))
    choice = get_valid_number(valid_inputs)

    name, sh = SERVERS[choice - 1] # -1 -> choice wird zum Index
    path = os.path.join(BASE_PATH, sh)
    subprocess.check_call(['/bin/bash', path])


if __name__ == '__main__':
    main()
Versuche ihn zu verstehen, Vorteil ist, du kannst ihn leicht erweiteren um z.B. mehr Server hinzuzufügen.

Zu deinem eigentlichen Problem, kann es sein, dass die Scripts Rootzugriff benötigen?
the more they change the more they stay the same
SyntoxicTech
User
Beiträge: 3
Registriert: Samstag 5. September 2015, 15:19

Erstmal Danke, ich setze mich gleich mal dran. Und ja um eine VPN Verbindung zu ermöglichen, brauchen die shell Dateien root Zugriff.

MfG SyntoxicTech
SyntoxicTech
User
Beiträge: 3
Registriert: Samstag 5. September 2015, 15:19

@Dav1d Das meiste davon kann ich nachvollziehen. Nur leider bekommt man folgenden Fehler:

Code: Alles auswählen

toxic@laboratory:~$ '/home/toxic/Schreibtisch/Server.py' 
  File "/home/toxic/Schreibtisch/Server.py", line 3
SyntaxError: Non-ASCII character '\xc2' in file /home/toxic/Schreibtisch/Server.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Das Shell Fenster soll sich nicht schließen, also der Script kann gerne danach zugehen, aber das Fenster für das VPN Login, also die Shell sollte offen bleiben.

Und schonmal Danke für Eure Hilfe

MfG SyntoxicTech
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

SyntoxicTech hat geschrieben:@Dav1d Das meiste davon kann ich nachvollziehen. Nur leider bekommt man folgenden Fehler:

Code: Alles auswählen

toxic@laboratory:~$ '/home/toxic/Schreibtisch/Server.py' 
  File "/home/toxic/Schreibtisch/Server.py", line 3
SyntaxError: Non-ASCII character '\xc2' in file /home/toxic/Schreibtisch/Server.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Das liegt an Sublime (dem Editor mit dem ich den Code geschrieben habe), Sublime hat anscheinend ein \xc2 eingefügt und du hast es mitkopiert, am besten die Zeilen löschen und mit der Hand abtippen, sorry aber kann das gerade nicht fixen.

SyntoxicTech hat geschrieben:Das Shell Fenster soll sich nicht schließen, also der Script kann gerne danach zugehen, aber das Fenster für das VPN Login, also die Shell sollte offen bleiben.
Der Code wird die entsprechende Shell-Skript ausführen und solange warten bis sich das Shell-Skript fertig ist, STDIN und STDOUT/STDERR werden an das Shell-Skript weitergeleietet. Also es sollte funktionieren wie du dir das vorstellst.
the more they change the more they stay the same
Antworten