小编bar*_*ter的帖子

从GNU parallel获取退出状态值

下面的Perl包装器并行执行命令,将STDOUT和STDERR保存到/ tmp文件:

open(A,"|parallel"); 
for $i ("date", "ls", "pwd", "factor 17") { 
  print A "$i 1> '/tmp/$i.out' 2> '/tmp/$i.err'\n"; 
} 
close(A); 
Run Code Online (Sandbox Code Playgroud)

如何从各个命令获取退出状态值?

parallel-processing perl exit-code

4
推荐指数
2
解决办法
2526
查看次数

Perl相当于pyephem?

什么是Perl相当于pyephem?

由于pyephem基于C库(?),我猜猜有人也创建了Perl版本?

python perl pyephem

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

"sort -c -k1"也比较第二个字段?

"排序"正确报告这两行是乱序的:

> echo "a b\na a" | sort -c 
sort: -:2: disorder: a a 
Run Code Online (Sandbox Code Playgroud)

如何判断排序只比较每行的第一个字段?我试过了:

> echo "a b\na a" | sort -c -k1 
sort: -:2: disorder: a a 
Run Code Online (Sandbox Code Playgroud)

但它失败了,如上所述.

我可以对每行的第一个字段进行排序比较,还是在比较它们之前我是否必须使用像sed之类的东西修剪线条?

编辑:我正在使用"sort(GNU coreutils)7.2".我尝试使用不同的字段分隔符,但它没有帮助:

> echo "a b\na a" | sort -k1 -c -t" "
sort: -:2: disorder: a a
Run Code Online (Sandbox Code Playgroud)

虽然我很确定空间是默认的分隔符.

sorting

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

Maxima在相对简单的积分上崩溃

我正在尝试使用Maxima-fy我的Mathematica盒子选项公式(https://github.com/barrycarter/bcapps/blob/master/box-option-value.m),但是Maxima在一个相当简单的集成上崩溃了:

load(distrib); 
pdflp(x, p0, v, p1, p2, t1, t2) := pdf_normal(x,log(p0),sqrt(t1)*v); 
cdfmaxlp(x, p0, v, p1, p2, t1, t2) := 1-erf(x/(v*sqrt(t2-t1)/sqrt(2))); 

upandin(p0, v, p1, p2, t1, t2) :=  
 integrate( 
 float( 
 pdflp(x, p0, v, p1, p2, t1, t2)* 
 cdfmaxlp(log(p1)-x, p0, v, p1, p2, t1, t2) 
 ), 
 x, minf, log(p1)); 
Run Code Online (Sandbox Code Playgroud)

评估upandin w /某些值崩溃:

upandin(1, .15, 1.01, 1.02, 1/365.2425, 2/365.2425); 

rat: replaced -.00995033085316809 by -603/60601 = -.00995033085262619 

rat: replaced 2.718281828459045 by 23225/8544 = 2.718281835205993 

rat: replaced 8116.5 by 16233/2 = 8116.5 

rat: replaced 2.718281828459045 …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica maxima

3
推荐指数
1
解决办法
1141
查看次数

如果做"math foo bar",如何在Mathematica中获得foo和bar?

如果我将Mathematica作为"math foo bar"运行,那么什么变量可以保持foo和bar?我猜它是$ Something,但还没有找到它.

谷歌搜索告诉我Mathematica接受命令行选项,如-pwpath,-pwfile,但我找不到实际命令行参数(不是选项)的正确搜索短语.

wolfram-mathematica

3
推荐指数
1
解决办法
194
查看次数

强制Perl在以exec()结尾时调用END子例程?

在Perl中使用exec()时:

请注意,它exec不会调用您的END块,也不会调用DESTROY对象上的方法.

无论如何我如何强制perl拨打电话END?我可以做类似的END(); exec($0)事情吗?

我真的想让程序结束它的当前实例并启动一个全新的实例,而且我懒得正确地执行此操作(使用cron或将整个程序置于无限循环中).但是,我的END子程序清理临时文件和其他重要的东西,所以我需要它们在执行之间运行.

无益的代码链接:

https://github.com/barrycarter/bcapps/blob/master/bc-metar-db.pl

https://github.com/barrycarter/bcapps/blob/master/bc-voronoi-temperature.pl

https://github.com/barrycarter/bcapps/blob/master/bc-delaunay-temperature.pl

perl

3
推荐指数
2
解决办法
1034
查看次数

'ps'和'top'显示单个进程的不同内存使用情况

当我做'ps -auxwww'时,它显示X使用大约342M的内存.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
[...] 
root      2009  1.0  5.1 342564 105012 tty7    Rs+  Oct08 469:24 X :0 
[...] 
Run Code Online (Sandbox Code Playgroud)

然而,'top'显示大约1358M:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
[...] 
 2009 root      20   0 1358m 102m  14m S  0.3  5.1 469:24.27 X 
[...] 
Run Code Online (Sandbox Code Playgroud)

为什么,哪一个是正确的?

我已经看到帖子重新'上'和'ps'"使用的总内存"不同(因为共享内存),但不是为什么会在单个进程上发生这种情况.

编辑:事实证明,即使没有"ps -eo"选项也会给出top给出的东西.

memory

3
推荐指数
1
解决办法
1603
查看次数

Perl:从内到外打开列表不起作用?

$all="{this, {is, some, {deeply, nested}, text}, for, you}";
while ($all=~s/{([^{}]*?)}/f($1)/seg) {}
sub f {return \{split(",",$_[0])};}
print @{$all};
Run Code Online (Sandbox Code Playgroud)

我希望$ all是一个listref,其列表包含:

{this, [reference to array], for, you}
Run Code Online (Sandbox Code Playgroud)

相反,@ {$ all}是空的.

我确信这是基本的,但我做错了什么?

注意:我有意"高举"代码在这里发布(即显示问题的最小代码).更广泛的版本是:https://github.com/barrycarter/bcapps/blob/master/playground.pl

编辑:感谢所有回答的人!笔记:

  • 真正的f()有副作用,更新dbs等,所以我真的必须调用它.它不仅仅是将列表更改为其他内容.我不好意思没有提到这一点.

  • 我从Mathematica导出所以"{a,b,c}"是一个列表,而不是哈希.再次,mea culpa没有提到这一点.

  • 我知道执行此操作的"正常"方式是递归的:处理每个元素,如果元素是列表,则在列表本身上调用f().我试图"展开"递归以避免拆分嵌套的"{".如果你在里面工作,你就不必在解析时计算"{".

  • 一个有趣的其他应用程序将是一个单行的XML解析器(差不多).

  • 给geekosaur一个复选标记,指出哪里出错了,为什么我的方法可能是错误的.

  • 我想我会尝试解析器方法,甚至是jrey的s/{/ [方法.

perl

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

Perl:当'打开(A,"proc |")'make'关闭(A)'立即返回时

如果我'打开(A,"proc |")',即使'proc'没有写完到stdout,我如何让'close(A)'立即返回?

"man perlfunc"告诉我:

过早地关闭管道的读取端(即在另一端写入它的过程关闭它之前)将导致SIGPIPE被传递给写入器.如果另一端无法处理,请务必在关闭管道之前读取所有数据.

但有解决方法吗?具体例子:

$|=1; 
open(A,"curl -sN http://test.barrycarter.info/bc-slow-cgi.pl|"); 

while (<A>) { 
  print "THUNK: $_\n"; 
  if (/5$/) {last;} 
} 

print "LOOP EXIT\n"; 
close(A); 
print "A CLOSED\n"; 
Run Code Online (Sandbox Code Playgroud)

bc-slow-cgi.pl只是每秒打印一次time():上面的代码打印"LOOP EXIT",但从不"A CLOSED".

perl

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

使用my()可以彻底改变XML :: Bare行为

当我运行这个Perl脚本时:

#!/bin/perl 
use XML::Bare; 
$ob = new XML::Bare(text=>'<xml><name>Bob</name></xml>'); 
for $i (keys %{$ob->{xml}}) {print "KEY: $i\n";} 
Run Code Online (Sandbox Code Playgroud)

我没有输出.但是,如果我放入$ob一个my():

#!/bin/perl 
use XML::Bare; 
my($ob) = new XML::Bare(text=>'<xml><name>Bob</name></xml>'); 
for $i (keys %{$ob->{xml}}) {print "KEY: $i\n";} 
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

KEY: _z 
KEY: _i 
KEY: xml 
KEY: _pos 
Run Code Online (Sandbox Code Playgroud)

为什么会my()如此彻底地改变这种行为,特别是考虑到我处于最高级别my()应该没有任何影响?

xml perl

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