我正在尝试创建一个简单的bash脚本来检查网站是否已关闭,并且由于某种原因"and"运算符不起作用:
#!/usr/bin/env bash
WEBSITE=domain.com
SUBJECT="$WEBSITE DOWN!"
EMAILID="an@email.com"
STATUS=$(curl -sI $WEBSITE | awk '/HTTP\/1.1/ { print $2 }')
STRING=$(curl -s $WEBSITE | grep -o "string_to_search")
VALUE="string_to_search"
if [ $STATUS -ne 200 ] && [[ "$STRING" != "$VALUE" ]]; then
echo "Website: $WEBSITE is down, status code: '$STATUS' - $(date)" | mail -s "$SUBJECT" $EMAILID
fi
Run Code Online (Sandbox Code Playgroud)
"-a"运算符也不起作用:
if [ $STATUS -ne 200 ] -a [[ "$STRING" != "$VALUE" ]]
Run Code Online (Sandbox Code Playgroud)
你能告诉我什么时候使用:
我在下面有这个简单的脚本来并行地将压缩的MySQL转储流式传输到Amazon S3存储桶:
#!/bin/bash
COMMIT_COUNT=0
COMMIT_LIMIT=2
for i in $(cat list.txt); do
echo "$i "
mysqldump -B $i | bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2 &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]; then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]; then
wait
fi
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
database1
database2
duration: 2.311823213s
duration: 2.317370326s
Run Code Online (Sandbox Code Playgroud)
有没有办法在每个转储的一行上打印这个?
database1 - duration: 2.311823213s
database2 - duration: 2.317370326s
Run Code Online (Sandbox Code Playgroud)
echo -n在这种情况下,开关没有帮助.
编辑:5月6日星期三15:17:29 BST 2015
我能够根据公认的答案达到预期的结果:
echo "$i -" $(mysqldump -B $i| …Run Code Online (Sandbox Code Playgroud) 有人可以解释这两个while循环之间的区别:
while read test; do
echo $test
done <<< "$(seq 5)"
Run Code Online (Sandbox Code Playgroud)
-
while read test; do
echo $test
done < <(seq 5)
Run Code Online (Sandbox Code Playgroud) 我正在使用基于类的视图(FormView),我希望在提交表单后保留搜索关键字(POST请求).我在form_valid方法中尝试了这个:
def form_valid(self, form):
self.initial['search'] = form.data['search']
...
Run Code Online (Sandbox Code Playgroud)
但这将为所有用户显示.这是许多网络搜索表单(更不用说谷歌搜索)的常见解决方案,所以我想知道如何在Django中完成这项工作.
更新:2017年6月19日星期一13:18:42 UTC
基于下面的一些答案,我将不得不重新解释我的问题.
我有一个带有几个输入字段的简单表单,在提交表单后,它将查询其他网站以根据搜索字词获得结果.我想将一些结果存储到数据库中,主要是为了生成统计数据,用选定的字段重新显示表单并显示结果.
目前,数据驻留在一个类对象上,并从POST传递给GET.出于明显的安全原因,这不是一个好的解决方案:
class SearchView(FormView):
...
data = dict()
def form_valid(self, form):
....
self.data['results'] = results
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['data'] = self.data.pop('results', None)
return context
Run Code Online (Sandbox Code Playgroud)
题:
在同一页面上显示表单(包含所选字段)和结果的最佳方法是什么,最好不使用会话或在POST和GET之间将它们存储在数据库中.
我已经考虑过的要点:
不要重定向用户(立即使用当前上下文呈现模板,而我们仍然有响应对象) - 我不喜欢页面刷新将重新提交表单的事实.
将响应保存到像Redis这样的键值存储中,并将用户重定向到结果/ {result_id},我们可以从数据库中检索响应以预先填充表单中的数据并显示结果 - 这听起来很合理但我为了将结果从POST传递给GET,我们必须添加另一个组件.
对这种类型的表单使用GET - 我的理解是我们应该使用POST进行数据修改
我使用以下命令构建了一个简单的 Python zipapp :
\n\npython -m pkg/ -c -o test -p \'/usr/bin/python3\' -m \'test:main\' zipapp\nRun Code Online (Sandbox Code Playgroud)\n\n我想从脚本访问二进制文件
\n\n$ cat pkg/test.py \ndef main():\n with open(\'test.bin\', \'rb\') as f:\n print(f.name)\nRun Code Online (Sandbox Code Playgroud)\n\n目录结构
\n\n$ tree pkg/\npkg/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.bin\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.py\n\n0 directories, 2 files\nRun Code Online (Sandbox Code Playgroud)\n\n但看起来该脚本引用了当前目录中的一个文件:
\n\n$ ./test \nTraceback (most recent call last):\n File "/usr/lib64/python3.7/runpy.py", line 193, in _run_module_as_main\n "__main__", mod_spec)\n File "/usr/lib64/python3.7/runpy.py", line 85, in _run_code\n exec(code, run_globals)\n File "./test/__main__.py", line 3, in <module>\n File "./test/test.py", line 2, in main\nFileNotFoundError: [Errno …Run Code Online (Sandbox Code Playgroud) 我正在尝试在CentOS上重新安装一个软件包:yum reinstall packagename但是我仍然可以看到我在这个软件包的配置文件中所做的更改.
有没有办法强制重新加载包及其配置文件?
问候
我正在尝试在此页面上生成的弹出窗口上接受 cookie 同意。我尝试使用,waitForSelector但我使用的所有选择器似乎对无头浏览器都是可见的。我想实际切换到“是”,然后提交表单。我想它是显示出来的,window.onload所以也许这需要在 JavaScript 中完成?
import asyncio
import time
from pyppeteer import launch
from pyppeteer.errors import TimeoutError
from urllib.parse import urlparse
URLS = [
'https://www.trustarc.com/'
]
start = time.time()
async def fetch(url, browser):
page = await browser.newPage()
try:
#await page.setRequestInterception(True)
page.on('request', callback)
await page.goto(url, {'waitUntil': 'networkidle0'})
await page.screenshot({'path': f'img/{urlparse(url)[1]}.png', 'fullPage': True})
except TimeoutError as e:
print(f'Timeout for: {url}')
finally:
await page.close()
async def callback(req):
print(f'Request: {req.url}')
async def run():
browser = await launch(headless=True, args=['--no-sandbox']) …Run Code Online (Sandbox Code Playgroud) 我有两个我暂时无法解决的问题。
1.我想使浏览器保持运行状态,以便我可以使用pyppeteer.launcher.connect()function 重新连接,但是即使我不致电,它似乎也被关闭了pyppeteer.browser.Browser.close()。
test01.py:
import asyncio
from pyppeteer import launch, connect
async def fetch():
browser = await launch(
headless=False,
args=['--no-sandbox']
)
print(f'Endpoint: {browser.wsEndpoint}')
await browser.disconnect()
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch())
$ python test01.py
Endpoint: ws://127.0.0.1:51757/devtools/browser/00e917a9-c031-499a-a8ee-ca4090ebd3fe
$ curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://127.0.0.1:51757
curl: (7) Failed to connect to 127.0.0.1 port 51757: Connection refused
Run Code Online (Sandbox Code Playgroud)
2.如何创建CDP会话。此代码应打开另一个浏览器窗口,但不能按预期工作:
test02.py
import asyncio
import time
from pyppeteer import launch, connect
async def fetch():
browser = await launch( …Run Code Online (Sandbox Code Playgroud) 因此,该函数gendata接受两个可选参数(name和source),然后基于具有该函数所需的相同参数的source调用值。parser
Type[SuperClass]应该接受从它继承的所有子类。为什么mypy在这种情况下会抱怨,为什么只针对 arg 1 和 2 而不是 3 ( source)?例如:
from dataclasses import dataclass
from typing import List, Optional, Type
@dataclass
class BaseItem:
name: str
value: int
@dataclass
class Item(BaseItem):
pass
@dataclass
class AnotherItem(BaseItem):
pass
def parser(item: Type[BaseItem], name: str, source: int) -> Type[BaseItem]:
item.value = source
return item
def gendata(
items: List[Item], name: Optional[str] = None, source: Optional[int] = None …Run Code Online (Sandbox Code Playgroud) 任务是将字段从一个数据集映射到另一个数据集,某些字段需要一些额外的解析/计算。
(我在下面提供的示例中只使用了几个字段,但原始数据集中有更多字段)。
最初我虽然使用 dict 进行字段映射,只是将函数分配给需要额外数据操作的键:
import base64
import hashlib
import json
from datetime import datetime
def str2base64(event):
md5 = hashlib.md5(event['id'].encode())
return base64.b64encode(md5.digest())
def ts2iso(event):
dt = datetime.fromtimestamp(event['timestamp'])
return dt.isoformat()
MAPPINGS = {
'id': id2hash,
'region': 'site',
'target': 'host',
'since': ts2iso
}
def parser(event):
new = dict()
for k, v in MAPPINGS.items():
if callable(v):
value = v(event)
else:
value = event.get(v)
new[k] = value
return new
def main():
for event in events: # dicts
event = parser(event)
print(json.dumps(event, indent=2))
if …Run Code Online (Sandbox Code Playgroud) python ×5
bash ×3
pyppeteer ×2
centos ×1
django ×1
if-statement ×1
oop ×1
properties ×1
puppeteer ×1
type-hinting ×1
while-loop ×1
yum ×1
ziparchive ×1