简介:我想在命令行上编写类似于bash脚本的python脚本,但是我还想在python中轻松地将它们连接在一起.我遇到麻烦的地方是制造后者的胶水.
所以,想象一下我写了两个剧本,script1.py和script2.py我能管他们在一起就像这样:
echo input_string | ./script1.py -a -b | ./script2.py -c -d
Run Code Online (Sandbox Code Playgroud)
如何从另一个python文件中获取此行为? 这是我所知道的方式,但我不喜欢:
arg_string_1 = convert_to_args(param_1, param_2)
arg_string_2 = convert_to_args(param_3, param_4)
output_string = subprocess.check_output("echo " + input_string + " | ./script1.py " + arg_string_1 + " | ./script2.py " + arg_string_2)
Run Code Online (Sandbox Code Playgroud)
如果我不想利用多线程,我可以做这样的事情(?):
input1 = StringIO(input_string)
output1 = StringIO()
script1.main(param_1, param_2, input1, output1)
input2 = StringIO(output1.get_value())
output2 = StringIO()
script2.main(param_3, param_4, input2, output2)
Run Code Online (Sandbox Code Playgroud)
这是我尝试的方法,但我坚持写胶水.我很感激学习如何完成下面的方法,或建议更好的设计/方法!
我的方法:我写了script1.py,script2.py看起来像:
#!/usr/bin/python3
... # import sys and …Run Code Online (Sandbox Code Playgroud) 你会如何生成一个非常大的随机数?我正在思考2 ^ 10 ^ 9(十亿位)的顺序.任何编程语言 - 我认为该解决方案将转换为其他语言.
我想在[1,N]上统一分布.
我最初的想法:
- 你可以随机生成每个数字并连接.问题:即使非常好的伪随机生成器也可能开发出数百万位数的模式,对吗?
您可以通过将随机数提高到随机指数来帮助创建大的随机数.问题:你必须使数学工作,以便得到的数字仍然是随机的,你应该能够在合理的时间内(比如一小时)计算它.
如果它有帮助,你可以尝试在可能更小的范围(例如使用实数)和变换上生成可能不均匀的分布.问题:这可能同样困难.
有任何想法吗?
[求助]似乎解决方案是这样的:
if exists('g:nameOfMyOption') && g:nameOfMyOption
...
endif
Run Code Online (Sandbox Code Playgroud)
这很简单,但我无法在网上找到答案.我想在插件文件中做这样的事情:
" MyChecker.vim
"
" Uncomment the following line to set the autochecker option
"set autochecker=1
if ISSET(autochecker)
autocmd InsertChange * :call MyAutoCheckerFunction()
endif
Run Code Online (Sandbox Code Playgroud)
我该如何处理ISSET线?我宁愿不必明确设置autochecker = 0,我只想检查autochecker是否存在.
编辑:当我尝试以下内容时:
if &autochecker == 1
...
endif
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
Error detected while processing MyChecker.vim:
line 32:
E113: Unknown option: autochecker
E15: Invalid expression: &autochecker == 1
Run Code Online (Sandbox Code Playgroud) 一个非常基本的问题,但作为一个Agda初学者,我很难过.
我只是想检查两个术语是否相等,并根据不同的情况返回不同的东西.我可以编写自己的相等测试程序,但是如何使用equiv(或者正确的方法)?
这是一个最小的例子:
import Data.Nat
import Relation.Binary
myeqtest : ? ? ? ? ?
myeqtest x y = if x Data.Nat.? y then true else false
Run Code Online (Sandbox Code Playgroud)
错误消息:.Relation.Nullary.Core.Dec(x.Relation.Binary.Core.Dummy.≡y)!= <检查表达式xData.Nat.≟y类型为Bool时类型为Set的Bool
我当然想要做一些更复杂的事情(我知道上面的内容在几个方面是多余的),但关键是x \?= y不是Bool类型,它是Set类型,我不知道知道如何将该Set变成Bool.谢谢.
我对 OCaml 很陌生。我尝试在两台不同的计算机上从头开始安装它——都是 Linux Mint——并且两次都遇到了这个问题。
当我使用 opam 安装一个包(特别是 Base,但它也发生在 Core 中)时,OCaml 找不到它。
$ opam install Base
[NOTE] Package base is already installed (current version is v0.11.1).
$ ocaml -open Base
OCaml version 4.05.0
File "command line", line 1:
Error: Unbound module Base
Run Code Online (Sandbox Code Playgroud)
ocaml 似乎在 /usr/lib/ocaml 中,它的二进制文件在 /usr/bin/ 中,而 opam 似乎把所有东西都放在 ~/.opam/packages 中。
如何让 OCaml 查看使用 opam 安装的软件包?我发现了许多涉及未绑定模块的问答错误,但似乎没有一个可以为我修复它,或者它们似乎已经过时。另外,我知道我的包管理器 OCaml 不是完全最新的,但是我也从源代码安装了 4.10.0 并且仍然有问题。