apt-get update
apt-get install -y libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libxml2-dev zlib1g-dev libcurl4-gnutls-dev libjpeg-turbo8-dev libbz2-dev libjpeg-dev libfreetype6-dev libmcrypt-dev libcurl4-gnutls-dev
ln -s /usr/include/x86_64-linux-gnu/curl curl
cd /usr/local/include
mkdir /opt/php-5.4.45
mkdir /usr/local/src/php5
cd /usr/local/src/php5
wget http://de2.php.net/get/php-5.4.45.tar.gz/from/this/mirror
mv mirror php-5.4.45.tar.gz
tar -xzvf php-5.4.45.tar.gz
cd php-5.4.45
./configure --prefix=/opt/php-5.4.45 --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --enable-mbstring --enable-sockets --enable-exif --enable-bcmath --enable-calendar --enable-zip --enable-ftp --enable-gd-native-ttf --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir --with-zlib --with-zlib-dir --with-bz2 --with-mcrypt --with-mhash --with-pcre-regex --with-libxml-dir=/usr --with-xmlrpc --with-xsl --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-curl
make
make install
/opt/php-5.4.45/bin/php -v
PHP 5.4.45 (cli) (built: Mar 12 2019 20:05:50)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
document.addEventListener('click', function(){ console.log(this, arguments); });
document
, а непосредственно на каждую из кнопок, внутри обработчика this
будет тем самым кликнутым элементом. pip install xlrd
вместо xlrd
пишете свою библиотеку, которую установили (но у вас она не работала) или хотите установить Скоро, скоро, благодаря серверному JS у серверных приложений тупо ничего не останется кроме последнего выбора — сдаться. Ну просто так сложилось, что ничто не в состоянии составить конкуренция JS. Питон и Руби могут попытаться, но вряд ли )https://habr.com/post/106274/#comment_3341256
import ast
import sys
class DumbLisp(ast.NodeTransformer):
def fix(self, source, result):
ast.copy_location(result, source)
ast.fix_missing_locations(result)
return result
def visit_Expr(self, node):
if isinstance(node.value, ast.Tuple):
t = node.value
if isinstance(t.elts[0], ast.Name):
if t.elts[0].id == 'newif':
_else = [ast.Expr(value=t.elts[3])] if len(t.elts) == 4 else []
_if = ast.If(test=t.elts[1],
body=[ast.Expr(value=t.elts[2])],
orelse=_else)
self.generic_visit(_if)
return self.fix(node, _if)
elif t.elts[0].id == 'define':
assign = ast.Assign(targets=[ast.Name(id=t.elts[1].id, ctx=ast.Store())],
value=t.elts[2])
return self.fix(node, assign)
else:
call = ast.Expr(value=ast.Call(func=t.elts[0], args=t.elts[1:], keywords=[]))
return self.fix(node, call)
return node
with open(sys.argv[1]) as fh:
tree = ast.parse(fh.read())
DumbLisp().visit(tree)
code = compile(tree, filename=sys.argv[1], mode="exec")
exec(code)
(define, a, 1)
(newif, a == 1, (print, 'Yes'), (print, 'No'))
python dumb_translator.py test.dl
const fs = require('fs');
fs.readdir('./folder', (err, files) => {
files.forEach(file => {
console.log(file);
});
})