import readline
import sys
sys.stdout.write("question? ")
while True:
try:
print raw_input(" \b")
break
except EOFError:
pass
except KeyboardInterrupt:
break
"import readline" will handle the Ctrl-D when you got something input at the question.
Tuesday, December 03, 2013
How to make Python raw_input ignores Ctrl-D
The way to do this is to have a while loop around raw_input, and not print the question again in the next iteration. However, because of this Python bug http://bugs.python.org/issue12833, raw_input() or raw_input('') will erase the previous printed question in stdout output with a backspace. A workaround will be needed. Then, there's also a problem with Ctrl-D after you input something...
Here's the code to handle Ctrl-D and quit at Ctrl-C without the stacktrace:
Monday, July 22, 2013
Syntax error near unexpected token LIBHTPMINVERSION PKG_CHECK_MODULES in Ubuntu
When compiling suricata 1.4.1 fresh in Ubuntu, after apt-get install all the necessary dependencies, you may see this:
syntax error near unexpected token `LIBHTPMINVERSION,'
` PKG_CHECK_MODULES(LIBHTPMINVERSION,
Well, if you google it, it's more like you need to install pkg-config. However, I have it installed. There was another post saying, maybe my pkg-config is not updated... Turns out the workaround is to modify the ACLOCAL_FLAGS described here.
By default, it's
export ACLOCAL_FLAGS="-I /usr/share/aclocal"
Thursday, July 11, 2013
Monkey patch (mock) the built-in raw_input function
For testing without mock (thirdparty or 3.x), I wrote a mock context manager function for raw_input. If you do not provide enough response in the mock_raw_input argument list, the raw_input is back to normal.
import __builtin__
import sys
from contextlib import contextmanager
@contextmanager
def mock_raw_input(*input_list):
"""Monkey patch the raw_input()"""
_raw_input = __builtin__.raw_input
def _stub(prompt='', input_iter=iter(input_list), orig=_raw_input):
try:
_input = next(input_iter)
sys.stdout.write(prompt)
return _input
except StopIteration:
__builtin__.raw_input = _raw_input
return raw_input(prompt)
__builtin__.raw_input = _stub
try:
yield
finally:
__builtin__.raw_input = _raw_input
def main():
with mock_raw_input('abc','cde'):
print raw_input('abc?\n')
print raw_input()
print raw_input('no more expected value? ')
raw_input('raw_input should be back to default here, right? ')
if __name__ == "__main__":
main()
Friday, March 22, 2013
Socket.IO 0.9.x client disconnect failed when using namespace
socket.disconnect() used to be working with my server. Then I changed my server to be using namespace, and the client side disconnect no longer works. Luckily I can find this from Google.
socket.socket.disconnect()
Thursday, March 21, 2013
Click a button to print an embedded PDF file without the printing dialog in Internet Explorer (silent print)
I recently helped a friend implementing a button to click, and it sends a hosted pdf to the defaulted printer without the printing dialog in IE8. I googled this about a few dozen pages and finally came across http://stackoverflow.com/questions/975652/silent-print-a-embedded-pdf. So here is the test.html. And due to the ActiveX used, you have to make this page to be trusted or in intranet.
<html>
<head>
<title>Test</title>
<script>
function printpdf(pdf_path) {
// remove the previous pdf <object> if existed
var elem = document.getElementById("pdf");
if (elem) {
elem.parentNode.removeChild(elem);
}
document.body.insertAdjacentHTML('beforeEnd', '<object id="pdf" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="0" height="0"><param name="src" value="' + pdf_path + '"/></object>');
pdf.printAll();
return false;
}
</script>
</head>
<body>
<!-- http://stackoverflow.com/questions/975652/silent-print-a-embedded-pdf -->
<button onclick="printpdf('sample.pdf');">Print PDF</button>
</body>
</html>
I put it in my dropbox as well: https://dl.dropbox.com/u/48348/pdf/pdf.html (put dropbox domain into trusted sites)
EDIT: Adobe Reader 8 was reported to leave a blank Adobe Reader application running whenever you click, then version 11 doesn't have this problem.
Wednesday, February 20, 2013
Python datetime timestamp conversion between timezones
Recently, I needed to deal with some datetime/timestamp conversion between timezones in Python.
from datetime import datetime, timedelta from dateutil import tz utc = tz.tzutc() local = tz.tzlocal() # http://stackoverflow.com/questions/8777753/converting-datetime-date-to-utc-timestamp-in-python/8778548#8778548 def to_timestamp(dt_in_utc, epoch=datetime(1970, 1, 1, tzinfo=utc)): td = dt_in_utc - epoch return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 1e6 # datetime to utc, if the datetime has no tzinfo, treat it as local def to_utc(dt): if dt.tzinfo is None: dt = dt.replace(tzinfo=local) return dt.astimezone(utc) # utc timestamp to datetime def to_datetime(timestamp, tz=local): return datetime.utcfromtimestamp(timestamp).replace(tzinfo=utc).astimezone(tz)
Subscribe to:
Posts (Atom)