Pexpect -> Exception exceptions.OSError

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
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Ich versuche mich gerade ein erstes mal mit Pexpect und habe nun folgendes Problem. Ich mache einen ganz normalen pexpect.spawn aufruf und will dann darauf reagieren. Das sieht folgendermassen aus:

Code: Alles auswählen

def x(self, event):
    child = pexpect.spawn('sudo touch /home/x/test.txt')
    child.expect('Password:')
    child.sendline(x)
Daraufhin kriege ich dann folgende Fehlermeldung:

Code: Alles auswählen

Exception exceptions.OSError: (1, 'Operation not permitted') in <bound method spawn.__del__ of <pexpect.spawn object at 0x8618dac>> ignored
System ist Kubuntu 7.04. Python 2.5

Nun weiss ich nicht wo das Problem liegen könnte. Leider hat mir weder Google noch die Doku weitergeholfen. Wäre toll wenn jemand helfen könnte.
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Ich hab das jetzt auh mal ausprobiert. Ich bekomme keine Fehlermeldung aber es passiert auch einfach nichts. Angeblich gibt es aber mehrere Expect Pakete für Python. Vielleicht sollte man da ein anderes probieren?

lgherby
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Was gibt es denn noch für Alternativen? Ich habe nur Pexpect gefunden, dass genau diese Anforderungen erfüllt.
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Also die FAQ auf der offiziellen Seite behauptet:
Q: Isn't there already a Python Expect?

A: Yes, there are several of them. They usually require you to compile C. I wanted something that was pure Python and preferably a single module that was simple to install. I also wanted something that was easy to use. This pure Python expect only recently became possible with the introduction of the pty module in the standard Python library. Previously C extensions were required.
Gefunden habe ich aber keine Alternative, die sind warscheinlich gut versteckt. Ich probiers aber noch ein paar Minuten.

lgherby
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Dank dir schonmal. Habe noch folgendes gefunden:

http://expect.nist.gov/
http://www.lysator.liu.se/~ceder/pcl-expect/

Allerdings hätte ich es doch am liebsten mit Pexpect gelöst. Hört sich am besten an.
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Vergiss das mit den Alternativen doch. pexpect geht nämlich im interaktivem Modus von Python nicht. Ich habe das Programm jetzt noch wirklich in eine Datei geschrieben und es läuft.

Code: Alles auswählen

import pexpect

child = pexpect.spawn('sudo touch /home/thelittlebug/Desktop/pexpect.txt')
child.expect('Password:')
child.sendline('meinpw')
Als Ausgabe bekomme ich dieses

Code: Alles auswählen

thelittlebug@ubuntu:~/Desktop$ python test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    child.expect('Password:')
  File "/usr/lib/python2.5/site-packages/pexpect.py", line 1064, in expect
    return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
  File "/usr/lib/python2.5/site-packages/pexpect.py", line 1132, in expect_list
    raise EOF (str(e) + '\n' + str(self))
pexpect.EOF: End Of File (EOF) in read_nonblocking(). Exception style platform.
<pexpect.spawn object at 0xb7df1d8c>
version: 2.1 ($Revision: 395 $)
command: /usr/bin/sudo
args: ['/usr/bin/sudo', 'touch', '/home/thelittlebug/Desktop/pexpect.txt']
patterns:
    Password:
buffer (last 100 chars): 
before (last 100 chars): 
after: <class 'pexpect.EOF'>
match: None
match_index: None
exitstatus: 0
flag_eof: True
pid: 5924
child_fd: 3
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.1
delayafterclose: 0.1
delayafterterminate: 0.1
Ich hab echt keine Ahnung ob mir das Sorgen machen muss oder nicht. :)
Geht bei dir meine Version des Codes auch?

lgherby
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Krieg immer die gleiche Fehlermeldung:

Code: Alles auswählen

Exception exceptions.OSError: (1, 'Operation not permitted') in <bound method spawn.__del__ of <pexpect.spawn object at 0xb7d9aacc>> ignored
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Und wenn du mal sudo weglässt und irgend einen anderen Befehl probierst. Ich schieb die Schuld einfach mal darauf.

probier mal ftp fernzusteuern.
hier ein ftplog zum testen

Code: Alles auswählen

thelittlebug@ubuntu:~/Desktop$ ftp
ftp> open ftp.inode.at
Connected to members.inode.at.
220-
220-
220------------------------------------------------
220-
220-      WILLKOMMEN AM FTP-SERVER VON INODE
220-
220-E-Mail: support@inode.at - Tel.: +43 59 999
220-
220------------------------------------------------
220-
220-
220 Inode.Internet FTP service
Name (ftp.inode.at:thelittlebug): guest
331 Anonymous login ok, send your complete email address as your password.
Password:
230 Zugangsberechtigung f�r User <guest> erfolgreich!
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
lgherby
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Wenn ich Sudo weglasse, brauche ich Pexpect gar nicht mehr. ;)

Mein einziges Ziel ist genau das Beispiel im ersten Post. Brauche weder Rückgabewerte noch sonstiges.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Du könntest aber mal was anderes ausprobieren um den Fehler zu lokalisieren und dann vlt. auch besser beheben zu können :wink:
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Hab schon sämtiche Sample-Scripte durchgearbeitet. Immer die gleiche Fehlermeldung. :wink:
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Was ich damit feststellen wollte: Vielleicht ist ja was an deinem System verstellt und die Schuld gar nicht bei pexpect zu suchen.

Sonst könnte ich das hier anbieten das sollte dann auch ohne pexpect gehen

Code: Alles auswählen

echo meinpassword | sudo -S touch /home/thelittlebug/Desktop/sudotest.txt
Gibt zwar auch nen Fehler auf der Shell wenn sudo das password schon kennt, läuft aber trotzdem durch.

lgherby
Benutzeravatar
think
User
Beiträge: 37
Registriert: Donnerstag 22. Februar 2007, 10:02
Wohnort: Schweiz

Werde das bei Zeit probieren. Sitze hier allerdings gerade mal ne Woche in nem Netzwerkkurs fest. Danke dir schonmal. Werde mich hier wieder melden.
Antworten