小编usu*_*sul的帖子

如何使python脚本在bash和python中都可以管道化

简介:我想在命令行上编写类似于bash脚本的python脚本,但是我还想在python中轻松地将它们连接在一起.我遇到麻烦的地方是制造后者的胶水.

所以,想象一下我写了两个剧本,script1.pyscript2.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)

python pipeline python-multithreading

7
推荐指数
1
解决办法
918
查看次数

生成非常大的随机数

你会如何生成一个非常大的随机数?我正在思考2 ^ 10 ^ 9(十亿位)的顺序.任何编程语言 - 我认为该解决方案将转换为其他语言.

我想在[1,N]上统一分布.

我最初的想法:

- 你可以随机生成每个数字并连接.问题:即使非常好的伪随机生成器也可能开发出数百万位数的模式,对吗?

  • 您可以通过将随机数提高到随机指数来帮助创建大的随机数.问题:你必须使数学工作,以便得到的数字仍然是随机的,你应该能够在合理的时间内(比如一小时)计算它.

  • 如果它有帮助,你可以尝试在可能更小的范围(例如使用实数)和变换上生成可能不均匀的分布.问题:这可能同样困难.

有任何想法吗?

random math number-theory

6
推荐指数
1
解决办法
2227
查看次数

如何在编写vimscript时使用选项?

[求助]似乎解决方案是这样的:

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)

vim options

4
推荐指数
1
解决办法
442
查看次数

Agda的平等考试分支?(基本)

一个非常基本的问题,但作为一个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.谢谢.

agda

2
推荐指数
1
解决办法
415
查看次数

告诉 OCaml opam 包在哪里

我对 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 并且仍然有问题。

ocaml development-environment opam

0
推荐指数
1
解决办法
389
查看次数