os,system,exec,popen234,subprocess

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.
Benutzeravatar
netdoobage
User
Beiträge: 12
Registriert: Donnerstag 1. März 2007, 15:13

os,system,exec,popen234,subprocess

Beitragvon netdoobage » Montag 21. Mai 2007, 13:18

Hallo Gemeinde - ja ich weiß, die Frage kam schon hundertfach und es gibt ellenlange threads dazu - aber ich komme nicht klar damit :?

Problem: ich möchte ein kleines script schreiben das PGP 2.6.3ia aufruft und verschiedene Textfiles aus einem Laufwerk verschlüsselt und signiert. Das Aufrufen von PGP und das Anwenden auf die verschiedenen Textdateien klappt wunderbar. Nur muss ich noch immer manuell bei jedem File mein PW eingeben. Das sollte aber möglichst automatisch funktionieren. Also muss ich beim Programmaufruf die PW mitgeben, oder?

Alles klar dachte ich, bei so vielen passenden threads wird was dabei sein. Nun vier Tage später klappt es immer noch nicht und ich weiß nicht mehr weiter. Das subprocess Modul kann ich nicht nutzen, da ich es nicht nachinstallieren kann(Berechtigungen). Bei popen2 bringt er mir immer den Fehler 'an integer is requiered'.

Hat von euch jemand eine Idee wie ich das PW mitgeben kann?

Gruß netdoobage
thelittlebug
User
Beiträge: 187
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Beitragvon thelittlebug » Montag 21. Mai 2007, 13:41

Vielleicht lässt sich ja dieses Passwort auch als Kommandozeilenparameter übergeben. Hast du da schon nachgesehen?

Sonst würde ich den Befehl ausführen, warten (100ms?), und dann per stdout das Passwort und ein "Enter" senden.

lgherby
Benutzeravatar
netdoobage
User
Beiträge: 12
Registriert: Donnerstag 1. März 2007, 15:13

Beitragvon netdoobage » Montag 21. Mai 2007, 14:24

Hallo thelittlebug, danke für die schnelle Antwort.

Wie genau kann ich es als Kommandozeilenparameter mitgeben? Wenn ich es nach dem Programmaufruf als os.system('PW') schreibe wird erst das Programm(PGP) abgearbeitet und dann wird versucht das PW als Shellbefehl auszuführen, was logischerweise nicht funktioniert.

Gruß
Benutzeravatar
netdoobage
User
Beiträge: 12
Registriert: Donnerstag 1. März 2007, 15:13

Beitragvon netdoobage » Montag 21. Mai 2007, 15:05

noch zur Ergänzung:

Python Version 2.3.4
____

os.system(cmd)
Programm wird abgearbeitet PW muss manuell eingegeben werden
____

chout, chin, cherr = popen2.popen3(cmd,"w")
chin.write("PW\13")
chin.close()

dann kommt 'an integer is required'
____

os.popen(cmd)

hier bleibt PGP während der Laufzeit stehen

Gruß netdoobage
BlackJack

Beitragvon BlackJack » Montag 21. Mai 2007, 15:31

Das nächste mal bitte gleich Deinen Quelltext zeigen, plus den kompletten Traceback.

Schau mal auf welche Zeile der Dich hinweist und dann in der Doku nach, warum das 'w' angemeckert wird und an der Stelle, wenn überhaupt etwas, eine ganze Zahl stehen sollte und keine Zeichenkette.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: os,system,exec,popen234,subprocess

Beitragvon Leonidas » Montag 21. Mai 2007, 16:32

netdoobage hat geschrieben:Das subprocess Modul kann ich nicht nutzen, da ich es nicht nachinstallieren kann(Berechtigungen).

Doch kannst du. subprocess.py in den Ordner kopieren in dem dein Programm ist - fertig.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
netdoobage
User
Beiträge: 12
Registriert: Donnerstag 1. März 2007, 15:13

Beitragvon netdoobage » Dienstag 22. Mai 2007, 13:31

Danke für eure Antworten

Die Nach(installation) des Modules hat wunderbar geklappt. Aber so ganz laufen will es noch nicht:

Code: Alles auswählen

cmd = []
cmd.append('/home/user/pgp/linux/pgp')
cmd.append('/home/user/tnb_vnb_ein/' + str(item))
cmd.append('-o')
cmd.append('/home/user/tnb_vnb_ein/decrypt/' + str(id))
proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
proc.stdin.write("PW\n")
proc.wait()


bei dieser Version bleibt das PGP einfach stehen:

[user@nl2 ~]$ python encrypt_decrypt.py
No configuration file found.
Pretty Good Privacy(tm) 2.6.3ia-multi06 - Public-key encryption for the masses
(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 2002-04-22
International version - for use everywhere (including USA).
Current time: 2007/05/22 11:01 GMT

PGP is now using IDEA with MD5.

______


Code: Alles auswählen

cmd = []
cmd.append('/home/user/pgp/linux/pgp')
cmd.append('/home/user/tnb_vnb_ein/' + str(item))
cmd.append('-o')
cmd.append('/home/user/tnb_vnb_ein/decrypt/' + str(id))
proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.stdin.write("PW\n")
proc.stdin.close()
proc.stdout.read()
proc.stdout.close()
proc.wait()


hier bleibt es auch stehen, allerdings bekomme ich wieder ein Prompt(wahrscheinlich durch wait(), oder?)

[user@nl2 ~]$ python encrypt_decrypt.py
No configuration file found.
Pretty Good Privacy(tm) 2.6.3ia-multi06 - Public-key encryption for the masses
(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 2002-04-22
International version - for use everywhere (including USA).
Current time: 2007/05/22 11:36 GMT

PGP is now using IDEA with MD5.

[user@nl2 ~]$

______

wenn ich das PW manuell eingebe(also nur den Befehl ausführen lasse) sieht das ganze so aus:

[user@nl2 ~]$ python encrypt_decrypt.py
No configuration file found.
Pretty Good Privacy(tm) 2.6.3ia-multi06 - Public-key encryption for the masses
(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 2002-04-22
International version - for use everywhere (including USA).
Current time: 2007/05/22 12:17 GMT

PGP is now using IDEA with MD5.


File is encrypted. Secret key is required to read it.
Key for user ID: user
1024-bit key, key ID 37B31CE1, created 2007/04/19

You need a pass phrase to unlock your RSA secret key.
Enter pass phrase: Pass phrase is good. Just a moment....IDEA..
File has signature. Public key is required to check signature.
.
Good signature from user "user".
Signature made 2007/05/15 14:18 GMT using 1024-bit key, key ID 37B31CE1
Signature made using MD5

Plaintext filename: /home/user/tnb_vnb_ein/decrypt/EOD_200705160821_000045_00_D012-XXX_D001-033.DAT

No configuration file found.
Pretty Good Privacy(tm) 2.6.3ia-multi06 - Public-key encryption for the masses
(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 2002-04-22
International version - for use everywhere (including USA).
Current time: 2007/05/22 12:17 GMT

PGP is now using IDEA with MD5.


File is encrypted. Secret key is required to read it.
Key for user ID: user
1024-bit key, key ID 37B31CE1, created 2007/04/19

You need a pass phrase to unlock your RSA secret key.
Enter pass phrase: Pass phrase is good. Just a moment....IDEA..
File has signature. Public key is required to check signature.
.
Good signature from user "user".
Signature made 2007/05/15 14:19 GMT using 1024-bit key, key ID 37B31CE1
Signature made using MD5

Plaintext filename: /home/user/tnb_vnb_ein/decrypt/EOD_012345678901_000023_00_D012-XXX_D001-033.DAT

[user@nl2 ~]$

______

ich habe keine Ahnung was ich falsch mache, hat jemand eine Idee? Wäre echt super.

@BlackJack:
sorry - werde ich in Zukunft machen, war gestern schon ein wenig genervt(soll aber kein Vorwand sein - schließlich bekommt man ja hier Hilfe) :)

Gruß netdoobage
BlackJack

Beitragvon BlackJack » Dienstag 22. Mai 2007, 15:31

Hast Du bei der zweiten Variante geschaut ob es vielleicht funktioniert hat? Die Ausgabe "verschluckst" Du ja mit dem `read()`. Wobei ich mir fast sicher bin das PGP/GnuPG kein Passwort von stdin entgegennimmt, wenn das kein echtes Terminal ist. Damit wären wir wieder bei `pexpect`.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Mai 2007, 18:11

BlackJack hat geschrieben:Wobei ich mir fast sicher bin das PGP/GnuPG kein Passwort von stdin entgegennimmt, wenn das kein echtes Terminal ist. Damit wären wir wieder bei `pexpect`.

Die Vermutung habe ich auch. An sich ist das aber auch teilweise ziemlich unpraktisch, vor allem weil die GnuPG-Leute nicht haben wollen, dass jemand Libraries schreibt, die GnuPG als Backend nutzen. Das angeblich aus Sicherheitsgründen, weil das nicht so einfach sicher zu implementieren sei. Ihr Argument ist "man kann ja gpg auch per Kommandozeile nutzen". :evil:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Dienstag 22. Mai 2007, 19:11

Es gäbe da noch GnuPGInterface. Kann man zumindest bei Ubuntu auch per `apt-get` installieren.
Benutzeravatar
netdoobage
User
Beiträge: 12
Registriert: Donnerstag 1. März 2007, 15:13

Beitragvon netdoobage » Mittwoch 23. Mai 2007, 07:22

OK, interessante Geschichte. Dann probier ich es mal mit pexpect. Gekuckt habe ich ob es funktioniert hat. Ich meld mich wieder...

BESTEN DANK netdoobage
Zuletzt geändert von netdoobage am Mittwoch 23. Mai 2007, 07:28, insgesamt 1-mal geändert.
Benutzeravatar
netdoobage
User
Beiträge: 12
Registriert: Donnerstag 1. März 2007, 15:13

Beitragvon netdoobage » Mittwoch 23. Mai 2007, 08:55

Juhuuu! :D mit pexpect klappt es wunderbar.

Vielen, vielen Dank für eure Hilfe.

Gruß netdoobage

Wer ist online?

Mitglieder in diesem Forum: __deets__