Difference between revisions of "User talk:Haoqili"
From K5Wiki
(→Bugs I've encountered and fixed (started loggin since Jun 24th).) |
(→Tips. Useful little things to know) |
||
Line 34: | Line 34: | ||
:''(out, err) = p.communicate('inputThing\n')'' <-- don't forget the return "\n" at the end! |
:''(out, err) = p.communicate('inputThing\n')'' <-- don't forget the return "\n" at the end! |
||
* When you're doing a bunch of p=Popen('shell command') be careful because Popen starts a new branch so the next Popen might start without the previous one having completed. To fix this problem, put in: |
* When you're doing a bunch of p=Popen('shell command') be careful because Popen starts a new branch so the next Popen might start without the previous one having completed. To fix this problem, put in: |
||
− | :<pre> |
+ | ::<pre> |
− | :if int(p.wait()) != 0: #meaning that it's not executed |
+ | ::if int(p.wait()) != 0: #meaning that it's not executed |
− | : print "error message" |
+ | :: print "error message" |
− | : exit |
+ | :: exit |
− | :</pre> |
+ | ::</pre> |
* Two ways to display outputs after Popen( a command that has to get into something, in my case, getting into kadmin.local) 06262009 |
* Two ways to display outputs after Popen( a command that has to get into something, in my case, getting into kadmin.local) 06262009 |
||
− | Way 1: |
+ | :Way 1: |
− | :<pre> |
+ | ::<pre> |
− | :p = Popen(['commannd', 'all', 'in', 'one', 'line'], stdin=PIPE, stdout=PIPE, stderr=PIPE) #e.g. ['kadmin.local', '-q', 'listprincs'] |
+ | ::p = Popen(['commannd', 'all', 'in', 'one', 'line'], stdin=PIPE, stdout=PIPE, stderr=PIPE) #e.g. ['kadmin.local', '-q', 'listprincs'] |
− | :if int(p.wait()) != 0: |
+ | ::if int(p.wait()) != 0: |
− | :print p.stdout.readlines() |
+ | ::print p.stdout.readlines() |
− | :</pre> |
+ | ::</pre> |
− | Way 2: |
+ | :Way 2: |
− | :<pre> |
+ | ::<pre> |
− | :p = Popen(['command', 'front', 'chunk'], stdin=PIPE, stdout=PIPE, stderr=PIPE) #e.g. ['kadmin.local'] |
+ | ::p = Popen(['command', 'front', 'chunk'], stdin=PIPE, stdout=PIPE, stderr=PIPE) #e.g. ['kadmin.local'] |
− | :(out, err) = p.communicate('rest of command') #e.g. 'listprincs' |
+ | ::(out, err) = p.communicate('rest of command') #e.g. 'listprincs' |
− | :print out |
+ | ::print out |
− | :</pre> |
+ | ::</pre> |
Revision as of 11:26, 30 June 2009
Kerberos Bugs I've encountered and fixed (started loggin since Jun 24th).
- When trying to kinit username
- ERROR: kinit: Cannot contact any KDC for realm [your realm fqdn] while getting initial credentials
- SOLUTION: make sure KDC is running. /usr/local/sbin/krb5kdc
- SOLUTION: 1. check log file. I looked in /var/log/auth.log. The bottom of it says: Cannot create reply cache file /var/tmp/krb5kdc_rcache: File exits. 2. sudo rm /var/tmp/krb5kdc_rcache.
- Can't start krb5kdc and in auth.log it says:
- ERROR: Address already in use - Cannot bind server socket to port [#] address [IP address]
- SOLUTION: 1. see if it is true that port [#] is in use by netstat -nap | grep [#] (I also did pgrep -x krb5kdc). 2. kill the process: pkill -x krb5kdc. note the "-x" is for matching exactly the process "krb5kdc".
Python Bugs I've encountered and fixed
- When talking to the terminal shell, a command (in my case, kdbt_util add_mkey) asks for password twice (second time is confirmation). I first tried:
- p = Popen(command.split(), stdin=PIPE, stdout=PIPE, stderr=PIPE)
- (out, err) = p.communicate('password')
- (out2, err2) = p.communicate('password')
- When I ran it, I got a chunk of error that ends with: ValueError: I/O operation on closed file. So what happens is that communicate closes the pipe, so it can only be used as the last line.
- Solution code:
- p = Popen(command.split(), stdin=PIPE, stdout=PIPE, stderr=PIPE)
- p.stdin.write('password'+'\n')
- p.stdin.write('password'+'\n')
- Note don't forget the new line at the end.
Tips. Useful little things to know
Python
- p = Popen('blah', stdin=PIPE, stdout=PIPE, stderr=PIPE)
- (out, err) = p.communicate('inputThing\n') <-- don't forget the return "\n" at the end!
- When you're doing a bunch of p=Popen('shell command') be careful because Popen starts a new branch so the next Popen might start without the previous one having completed. To fix this problem, put in:
- if int(p.wait()) != 0: #meaning that it's not executed
- print "error message"
- exit
- Two ways to display outputs after Popen( a command that has to get into something, in my case, getting into kadmin.local) 06262009
- Way 1:
- p = Popen(['commannd', 'all', 'in', 'one', 'line'], stdin=PIPE, stdout=PIPE, stderr=PIPE) #e.g. ['kadmin.local', '-q', 'listprincs']
- if int(p.wait()) != 0:
- print p.stdout.readlines()
- Way 2:
- p = Popen(['command', 'front', 'chunk'], stdin=PIPE, stdout=PIPE, stderr=PIPE) #e.g. ['kadmin.local']
- (out, err) = p.communicate('rest of command') #e.g. 'listprincs'
- print out