我们尝试将包含多个插入语句的SQL文件作为单个查询运行,但是rollback当任何语句包含错误时,它似乎都失败了.
MySQLd配置:
sql_mode = STRICT_ALL_TABLES
default-storage-engine = innodb
Run Code Online (Sandbox Code Playgroud)
Python代码:
from contextlib import closing
import MySQLdb
database_connection = MySQLdb.connect(host="127.0.0.1", user="root")
with closing(database_connection.cursor()) as cursor:
database_connection.begin()
cursor.execute('DROP DATABASE IF EXISTS db_name')
cursor.execute('CREATE DATABASE db_name')
cursor.execute('USE db_name')
cursor.execute('CREATE TABLE table_name(first_field INTEGER)')
with closing(database_connection.cursor()) as cursor:
try:
database_connection.begin()
cursor.execute('USE db_name')
cursor.execute('INSERT INTO table_name VALUES (1)')
cursor.execute('INSERT INTO table_name VALUES ("non-integer value")')
database_connection.commit()
except Exception as error:
print("Exception thrown: {0}".format(error))
database_connection.rollback()
print("Rolled back")
with closing(database_connection.cursor()) as cursor:
try:
database_connection.begin()
cursor.execute('USE db_name')
cursor.execute('INSERT INTO …Run Code Online (Sandbox Code Playgroud) 所以pip和virtualenv声音相比更精彩setuptools.能够卸载会很棒.但我的项目已经在使用setuptools,那么我该如何迁移?到目前为止,我能够找到的网站非常模糊和笼统.所以这是在阅读主要网站并尝试填写之后的问题选集:
virtualenv和pip应该由现在处于可用状态?如果没有,请将其他人视为狂人的狂言.virtualenv安装?我还没有准备好相信它像其他地方所解释的一样令人费解.build-dep占用了250 MB的磁盘空间).在打印了一大堆警告之后src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope.setup.py?pip应该取代easy_install,但目前尚不清楚它是否是一种堕落或更复杂的关系.$PATH并$PYTHONPATH运行生成的包?virtualenv在坏日子是怎样的?#egg=PackageURL语法?这不是标准URL的一部分,为什么它不是一个单独的参数?我正在尝试设计一种生成随机2D凸多边形的方法.它必须具有以下属性:
例如,生成具有10个顶点并位于square [0..100] x [0..100]内的随机多边形.
使这项任务变得困难的原因是坐标应该是整数.
我尝试的方法是在给定的方格中生成随机的点集并计算这些点的凸包.但是与N相比,合成的凸包是非常小的顶点.
有任何想法吗?
我可以创建一个枚举类RockPaperScissors,使ROCK.value == "rock"and ROCK.beats == SCISSORS,where ROCK和SCISSORS均为常量RockPaperScissors吗?
我保持机器最新的常用命令相当冗长,如果任何命令需要很长时间,它可能会导致多个密码提示:
sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove && sudo apt-get autoclean
Run Code Online (Sandbox Code Playgroud)
我想将其缩短为一个命令(最好不使用全局别名).
sudo sh -c 'apt-get update && apt-get upgrade --yes && if [ -f /var/run/reboot-required ]; then echo You should reboot; fi'
Run Code Online (Sandbox Code Playgroud) find将文件名开头的短划线解释为选项的开头.使用熟悉的--技巧不起作用,因为选项在文件名之后,引用无效,并且替换第一个破折号\-也不起作用.通常鼓励用户在这些文件名之前./,但如果我不知道给定路径是绝对路径还是相对路径,我该怎么办?
编辑:一个解决方案是find "$(readlink -f -- "$test_filename")",但它很难看.有更好的想法吗?
编辑2:感谢您的建议.以下是这项工作产生的两个脚本: safe-find.sh ; safe-count-files.sh
我有一个阵列
arr=( x11 y12 x21 y22 x31 y32)
Run Code Online (Sandbox Code Playgroud)
我需要将此数组排序为
x11 x21 x31 y12 y22 y32
Run Code Online (Sandbox Code Playgroud)
所以,我需要按字母和数字排序
我如何在shell脚本中执行此操作?
如果我使用[ $i -le $j ],它会说"预期的整数表达式".
字符串也可能包含其他字符:x.1.1或1.x.1.
我该怎么做呢 ?
我想将一系列命令的结果发送给变量:
variable=$(a | few | commands)
Run Code Online (Sandbox Code Playgroud)
但是,命令替换重置PIPESTATUS,所以我无法检查事后的错误.一种解决方案是mktemp暂时使用并将结果放在那里:
variable_file=$(mktemp) || exit 1
a | few | commands > $variable_file
exit_codes="${PIPESTATUS[*]}"
variable=$(<$variable_file)
Run Code Online (Sandbox Code Playgroud)
有更优雅的解决方案吗?
出于测试目的,我想保存输出和错误分别通过随后的代码检查.例如,具有错误输入的测试运行应该导致输出到stderr,但是在stdout上没有输出,而具有正确输入的测试运行应该导致输出到stdout,但是没有输出到stderr.保存必须是同步的,以避免测试的竞争条件(因此我不能使用进程替换).
为了能够在事后调试测试,我还需要在输出的序列中看到stdout和stderr.因此,我必须将它们保存到相同的文件/变量/任何/或者同时将它们发送到终端,以便单独保存它们.
为了测试发生了哪个错误,我还需要命令的退出代码.
出于效率和准确性的原因,我当然不能每次测试两次.
例如,可以将stdout重定向到stdout.log,将stderr重定向到stderr.log,并将它们都重定向到output.log中的同一命令吗?或者为stdout和stderr分别使用同步 tee命令?或者将stdout和stderr的副本保存为单独的变量?
更新:看起来tim的解决方案几乎可以工作(修改为在终端上输出而不是记录到all.log):
$ set -o pipefail
$ {
{
echo foo | tee stdout.log 2>&3 3>&-
} 2>&1 >&4 4>&- | tee stderr.log 2>&3 3>&-
} 3>&2 4>&1
foo
$ cat stdout.log
foo
$ cat stderr.log
$ {
{
echo foo >&2 | tee stdout.log 2>&3 3>&-
} 2>&1 >&4 4>&- | tee stderr.log 2>&3 3>&-
} 3>&2 4>&1
foo
$ cat …Run Code Online (Sandbox Code Playgroud) 已经有一个GitHub问题的API,但有没有人成功实现双向?那是:
git clone git@github.com:user/repo.issues.git # Like for wiki
editor repo.issues/1.json
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
瞧,一个新的/更新的问题#1!
在接受任何推送之前,它可以使用预接收挂钩进行验证,因此无效格式化应该不是问题.
换句话说,有没有办法将GitHub项目的问题作为另一个GitHub回购处理?