Articles of pipe理员

如何将python脚本的输出输出到Rscript中?

我正在编写一个bash脚本,它使用命令行input中的parameter passing给python脚本,结果是使用python的csv.writer模块生成一个.csv文件。 然后我写了一个R脚本,它自己接受一个.csv文件,但是现在我想直接从我的python脚本中将csv文件导入到我的r脚本中。 这是我的bash脚本: #!/bin/bash python protparams.py $1 | Rscript frequency.r 和我的Python脚本: from Bio import SeqIO from Bio.SeqUtils import ProtParam from Bio.SeqUtils import ProtParamData import sys import csv handle = open(sys.argv[1]) with open('test.csv', 'w') as fp: writer = csv.writer(fp, delimiter=',') for record in SeqIO.parse(handle, "fasta"): seq = str(record.seq) X = ProtParam.ProteinAnalysis(seq) data = [seq,X.get_amino_acids_percent(),X.aromaticity(),X.gravy(),X.isoelectric_point(),X.secondary_structure_fraction(),X.molecular_weight(),X.instability_index()] writer.writerow(data) […]

从U-boot shell模式写入NVRAM

带embedded式系统的硬件设备。 NVRAM已损坏,我想replacenvram。 是否可以从U-boot shell模式更新NVRAM? U-boot提供了升级固件,u-boot,uimage和其他组件的选项:来自U-boot代码的两个例子: update_uboot=tftpboot 0x80000100 u-boot.bin && protect off 0x48000000 +${filesize} && erase 0x48000000 +${filesize} && sleep ${sdelay} && cp.b ${fileaddr} 0x48000000 ${filesize} && protect on 0x48000000 +${filesize} update_uimage=tftpboot 0x80000100 uImage && protect off ${UBFIADDR1} +${filesize} && erase ${UBFIADDR1} +${filesize} && sleep ${sdelay} && cp.b ${fileaddr} ${UBFIADDR1} ${filesize} && protect on ${UBFIADDR1} +${filesize} […]

限制可用内存在linux上进行testing

我开发的机器比内存代码最终运行的内存要多。 我没有访问它将实际运行的机器。 这是一个64位的应用程序,我打算使用地址空间,但封顶物理分配。 我不想locking虚拟内存,只有物理内存。 有没有办法在Linux机器上设置限制,以便模仿低RAM的系统。 我认为ulimit不区分保留地址空间与实际分配。 如果有办法做到这一点,而不用不同的内核参数重新启动,或者拉出额外的内存将是很好的。 可能是一些/ proc技巧。

如何知道系统是否完全闲置

我想弄清楚,如何知道系统是否闲置? 如果系统闲置了一些x分钟,我想暂停系统。 我试图find这个,并尝试下面的脚本代码以及 #!/bin/bash idletime=$((1000*60)) # 1 minute in milliseconds while true; do idle=`xprintidle` echo $idle if (( $idle > $idletime )); then echo -n "mem" >> /sys/power/state fi sleep 1 done 但是xprintidle只监视鼠标和键盘的活动来增加它的计数器。 现在,如果我在无限循环中运行一个程序,那么它也会暂停系统。 另一种select是在一段时间内从/ proc / stat中提取空闲时间,但是在不同的系统上,如果我离开系统没有任何活动,我会看到cpu空闲的不同范围的值。 有人可以帮我实行系统暂停吗?

节点产生stdout.on数据延迟

我正在检查在Linux上的USB驱动器删除。 我只是用child_process.spawn来监视命令行进程的输出。 但由于某种原因,直到20行已经被打印,孩子的stdout数据事件才会发出,这使得它无法检测到被移除的驱动器。 多次拆下驱动器后,它终于走了。 但显然这是不行的。 原版的: var udevmonitor = require("child_process").spawn("udevadm", ["monitor", "–udev"]); udevmonitor.stdout.on("data", function(data) { return console.log(data.toString()); }); 很简单。 所以我认为这是pipe道节点在内部使用的问题。 所以,而不是使用pipe道,我想我只是使用一个简单的传递stream。 这可以解决问题,并给我实时输出。 该代码是: var stdout = new require('stream').PassThrough(); require("child_process").spawn("udevadm", ["monitor", "–udev"], { stdio: ['pipe', stdout, 'pipe'] }); stdout.on("data", function(data) { console.log(data.toString()); }); 但是,这给了我一个错误:child_process.js:922扔新TypeError('stdiostream不正确的值:'+ stdio); 该文件说,你可以传入一个stream。我不明白我在做什么错误,并逐步通过child_process源没有帮助。 有人可以帮忙吗? 你可以自己运行,只要你在Linux上。 运行代码并插入USB驱动器。 也许你可以在另一个terminal运行“udevadm monitor –udev”命令来看看会发生什么。 删除并重新插入几次,最终节点将打印出来。

如何使用针对相同文件运行的命令更新文件?

作为一个简单的例子,考虑下面的命令: $ sort file.txt 这将以sorting的顺序输出文件的数据。 我怎么把这个数据放回到同一个文件中? 我想用sorting的结果更新文件。 这不是解决scheme: $ sort file.txt > file.txt …因为这会导致文件空白。 有没有办法更新这个文件,而不创build一个临时文件? 当然,我可以做这样的事情: sort file.txt > temp.txt; mv temp.txt file.txt 但是我宁愿将结果保存在内存中直到处理完成,然后将它们写回到同一个文件中。 sorting实际上有一个标志,将允许这是可能的: sort file.txt -o file.txt …但我正在寻找一个解决scheme,不依赖于二进制有一个特殊的标志来解决这个问题,因为并不是所有的都保证。 有什么样的Linux命令将保存数据,直到处理完成?

访问连续的物理地址比虚拟地址快吗?

分配一块连续的物理内存有什么好处? 访问连续的物理地址比虚拟地址快吗? 为什么?

为了在Linux上创build一个新的用户,我应该给crypt提供什么样的价值?

我正在写一个Perl脚本,它将创build一个新的用户(在Ubuntu上)。 这将需要一个步骤 $encrypted_password = crypt ($password, $salt); system ("useradd -d $home -s /bin/bash -g $group -p $encrypted_password $name"); $salt的价值应该是多less? 互联网上的例子似乎使用任意的值,但是如果encryption的密码将被用来testing用户input的内容,那么内核需要用相同的散列值对input进行散列,以便通过比较。 这个网站声称salt是在crypt的输出中编码的,但是这显然是不正确的。 在Perl的输出中 print crypt("foo", "aa"); print crypt("foo", "aabbcc"); print crypt("foo", "aa1kjhg23gh43jhgk32kh325423g"); print crypt("foo", "abbbcc"); 是 aaKNIEDOaueR6 aaKNIEDOaueR6 aaKNIEDOaueR6 abQ9KY.KfrYrc 除了来自不同的盐的相同的哈希,这是可疑的,似乎只有盐的前两个字符被使用。 从安全的angular度来看,这是没有意义的。 此外,输出的格式不符合上述链接的要求。 那么在为useraddencryption密码时,我应该使用什么值的salt?

在Windows和其他Unix版本中实现mmap的`MAP_POPULATE`标志,在Windows中使用MADV_WILLNEED

Linux mmap(2)有一个有用的标志: MAP_POPULATE ,当指定时,将默认所有我们分配的页面。 其他的Unices系统没有这个标志,除了有一个名为MAP_PREFAULT_READ的等价标志的FreeBSD。 如果我想在Windows和其他Unices系统中实现这种行为,我怎样才能以最好的方式做到这一点? 我想了2种可能的方法: 1)最便携的:只要做一个循环,在每个分配的页面的基地址写一个'\ 0'字符(也是最慢的实现,如果页面很多)。 这也会有一些不好的影响,我现在没有看到? 2)在madvise()+MADV_WILLNEED上调用madvise()+MADV_WILLNEED 。 不幸的是,这个组合的等价Windows版本没有:在Windows上,你只有VirtualAlloc()+MEM_RESET ,这相当于madvise()+MADV_DONTNEED但是你没有madvise()+MADV_WILLNEED来调用,因为even必须调用VirtualAlloc()+MEM_RESET ,在同一范围的内存上调用VirtualAlloc()+MEM_RESET之后,否则行为是不确定的。 所以,还有另外一个问题的空间:有一个相当于madvise()+MADV_WILLNEED Windows不仅用于这种情况,而且一般来说,作为告诉Windows“看,我需要这些页面”的一种方式? 有什么想法吗?

处理器和虚拟/物理地址

简而言之,就我所了解的内存pipe理而言,处理器产生虚拟地址。 这些地址通过MMU使用每个进程的地址表转换为相应的物理地址(在需要的时候有TLB和页面错误)。 我的问题是处理器总是产生虚拟地址? 当处理器产生物理地址时,地址空间(用户/内核),处理器模式(用户/内核)和上下文(进程/系统)