【问题标题】:How to pipe out data from Python PRNG script similar to /dev/urandom into Dieharder如何将类似于 /dev/urandom 的 Python PRNG 脚本中的数据通过管道输出到 Dieharder
【发布时间】:2018-03-12 05:30:00
【问题描述】:

我已经创建了一个伪随机数生成器,并且我正在尝试通过管道输出类似于如果有人运行的数据 “$ 猫 /dev/urandom/” 具体来说,我正在尝试将数据传输到顽固的 RNG 测试套件。

通常情况下,从 urandom 读到死硬的看起来像 "$ cat /dev/urandom | 顽固分子 -a -g 200"

我的程序旨在无限生成数字并在 main 中输出为:

def main():
 ... # setup and variables
    for _ in iter(int,1): # infinite loop
        PRNG_VAL = PRNG_FUNC(count_str,pad,1) # returns b'xx'
        PRNG_VAL = int(PRNG_VAL,16) # returns integer
        sys.stdout.write(chr(PRNG_VAL)) # integer to chr, similar to /dev/urandom type output

显然,当我运行类似 “$ cat ./top.py | 顽固分子……” 结果输出只是文件内容的读取。

我如何运行文件,而不是读取 'top.py' 的内容,并将输出通过管道传输到 dieharder,类似于从 /dev/urandom 读取?

感谢任何帮助!

【问题讨论】:

  • 这不是一个真正的 Python 问题,而是一个 shell 问题或一个基本的操作系统问题。但在大多数 POSIX shell 中,答案只是./top.py | diehardercat ./top.py 将脚本的内容打印到标准输出; ./top.py 运行脚本,脚本打印的任何内容都会进入标准输出。

标签: python testing random


【解决方案1】:

我如何运行文件,而不是读取 'top.py' 的内容,并将输出通过管道传输到 dieharder...

sh 和大多数其他 POSIX shell 中,您以与通常运行它相同的方式运行它,并通过管道(与您通过管道传输 cat 的输出相同的方式):

./top.py | dieharder

… 或:

python top.py | dieharder

您使用cat /dev/urandom 的原因是urandom 不是程序,而是文件。当然,它不是磁盘上的常规文件,它是一个特殊的设备文件,由设备驱动程序创建并通过mknod 挂载,但你不必担心(除非你想写你的自己的设备驱动程序);它就像一个充满字节的常规文件一样。你不能轻易地做同样的事情,但你不必这样做。


您应该阅读有关基本 shell 脚本的优秀教程。我没有推荐的,但我敢肯定有很多。

【讨论】:

  • 感谢@abarnert 的回复,我没有纯shell 脚本的强大背景。如果您确实有好的教程可以推荐,我将不胜感激。
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
相关资源
最近更新 更多