有没有简单的方法来告诉perl"现在忽略所有打印的东西"?
我必须在外部Perl模块中调用一个过程,但该过程会打印出许多不必要的信息(通过标准打印).
我知道选择可以用来以某种方式重定向它,但我不太明智地阅读它上面的perldoc.
编辑:我很快就找到了答案,但我会添加一个例子来使它更清晰(但我猜不多)
use TectoMT::Scenario;
use TectoMT::Document;
sub tagDocuments {
my @documents = @_;
my $scenario = TectoMT::Scenario->new({'blocks'=> [ qw(
SCzechW_to_SCzechM::Sentence_segmentation
SCzechW_to_SCzechM::Tokenize
SCzechW_to_SCzechM::TagHajic
SCzechM_to_SCzechN::Czech_named_ent_SVM_recognizer) ]});
$scenario->apply_on_tmt_documents(@documents);
return @documents;
}
Run Code Online (Sandbox Code Playgroud)
TectoMT :: Scenario和TectoMT :: Document是那些外部模块
我在Perl中执行的系统命令的输出是否有文件句柄/句柄?
可能重复:
检查Python中打开的文件
你好,
是否有可能获得所有当前打开的文件句柄的列表,我认为它们存储在环境中的某个位置.
我对theis函数感兴趣,因为我想安全地处理在引发致命错误时打开的任何文件,即关闭文件句柄并用原始文件替换可能已损坏的文件.
我有处理工作,但不知道什么文件句柄是打开的,我无法实现这个想法.
顺便说一句,当初始化文件句柄时,是否可以通过另一个导入的方法继承它?
谢谢
map { function($_) } <FILEHANDLE>;使用perl时调用是否将整个文件加载到内存中?
我有一个程序,反过来访问DLL.它以各种方式使用文件,创建它们,复制它们并将它们建立为emailMessage对象的附件.我有一个'正在使用的文件'错误,防止覆盖文件.
是否有任何工具或技术来简化过程 - 例如某种警告创建/删除包含特定字符串的句柄?我查看了进程资源管理器,进程监视器(filemon的继任者)等但没有运气.
我可以继续打猎,但认为可能有更好的方法,而不是通过代码继续我的非正式调查.
编辑
感谢您的评论.关于问题,结构有点复杂.我的"客户端"应用程序引用了"引擎"dll(也在C#中).两者都是我自己的.客户端创建"附件"实例,每个附件都包含对各种文件的文件引用.它的构造函数抓取引用的文件,并将副本放在临时文件夹中.稍后,一组"操作"构建电子邮件 - 它将每个附件添加为EmailMessage对象的"真实"附件.在不同的时间我处理对象并将它们的引用设置为null,但是如果我太早做,那么我最终会得到null引用异常.如果我做得太晚了,该死的东西都在用!我确信我可以在适当的时候追捕这个特定的bug,但它让我想知道是否有一个有用的标准方法被知道的人使用.:)
我正在开发一个程序,用于输入两个文件名的用户输入.不幸的是,如果用户不遵循指定的输入格式,程序很容易中断.我想编写代码来提高它对这些类型的错误的弹性.当你看到我的代码时,你会明白的:
# Ask the user for the filename of the qseq file and barcode.txt file
print "Please enter the name of the qseq file and the barcode file separated by a comma:";
# user should enter filenames like this: sample1.qseq, barcode.txt
# remove the newline from the qseq filename
chomp ($filenames = <STDIN>);
# an empty array
my @filenames;
# remove the ',' and put the files into an array separated by spaces; indexes the files
push @filename, join(' ', …Run Code Online (Sandbox Code Playgroud) 我有一个用Python编写的巨大管道,它使用非常大的.gz文件(约14GB压缩),但需要更好的方法将某些行发送到外部软件(来自blast-legacy/2.2.26的formatdb).我有很长一段时间以前为我写过的Perl脚本这样做非常快,但我需要在Python中做同样的事情,因为管道的其余部分是用Python编写的,我必须保持这种方式.Perl脚本使用两个文件句柄,一个用于保存.gz文件的zcat,另一个用于存储软件所需的行(每4个中有2个)并将其用作输入.它涉及生物信息学,但不需要经验.该文件采用fastq格式,软件需要采用fasta格式.每4行是一个fastq记录,取第1行和第3行并在第1行的开头添加'>',这就是formatdb软件将用于每个记录的fasta等价物.
perl脚本如下:
#!/usr/bin/perl
my $SRG = $ARGV[0]; # reads.fastq.gz
open($fh, sprintf("zcat %s |", $SRG)) or die "Broken gunzip $!\n";
# -i: input -n: db name -p: program
open ($fh2, "| formatdb -i stdin -n $SRG -p F") or die "no piping formatdb!, $!\n";
#Fastq => Fasta sub
my $localcounter = 0;
while (my $line = <$fh>){
if ($. % 4==1){
print $fh2 "\>" . substr($line, 1);
$localcounter++;
}
elsif ($localcounter == 1){
print $fh2 "$line";
$localcounter = 0; …Run Code Online (Sandbox Code Playgroud) 我在日志目录中有多个访问日志,遵循以下命名约定:
access.log.1284642120
access.log.1284687600
access.log.1284843260
Run Code Online (Sandbox Code Playgroud)
基本上,日志由Apache每天"旋转",因此可以按顺序对它们进行排序.
我试图"一个接一个地读取它们",以便它们可以被视为一个日志文件.
my @logs = glob('logs/access.log.*');
Run Code Online (Sandbox Code Playgroud)
上面的代码将全部记录所有日志,但我不确定:
我有一个Perl脚本可以读取单个访问日志并轻松检查(我的算法是使用一个大的哈希,它使用IP地址作为密钥,访问时间作为值,并继续向其推送键/值对...).但我不想只是为了这个过程将所有访问文件合并到一个临时文件中.
有什么建议?提前谢谢了.
我正在创建一个可以读取命令的小shell.当我运行我的程序并输入:"cat file.txt > file2.txt"它创建文件,然后它卡在行:( if(execvp(structVariables->argv[0], argv) < 0).等待输入/输出??).如果我用ctrl + d结束程序,我可以在我的文件夹中看到文件已创建,但没有写入任何内容.(dupPipe用于处理更多命令,由于上述问题尚未使用)
if((pid = fork()) < 0)
{
perror("fork error");
}
else if(pid > 0) // Parent
{
if(waitpid(pid,NULL,0) < 0)
{
perror("waitpid error");
}
}
else // Child
{
int flags = 0;
if(structVariables->outfile != NULL)
{
flags = 1; // Write
redirect(structVariables->outfile, flags, STDOUT_FILENO);
}
if(structVariables->infile != NULL)
{
flags = 2; // Read
redirect(structVariables->infile, flags, STDIN_FILENO);
}
if(execvp(structVariables->argv[0], argv) < 0)
{
perror("execvp error");
exit(EXIT_FAILURE);
} …Run Code Online (Sandbox Code Playgroud) 我有一个访问PostgreSQL数据库的应用程序,需要根据一些需要的处理从中读取一些大的二进制数据.这可能是数百MB甚至数GB的数据.请不要讨论使用文件系统等等,它就像现在这样.
该数据只是各种类型的文件,例如它可能是Zip容器或其他类型的存档.一些需要的处理是列出Zip的内容,甚至可以提取一些成员进行进一步处理,也可以散列存储的数据......最后,数据被多次读取,但只写入一次以存储它.
我使用的所有Perl库都可以使用文件句柄,有些用于IO::Handle,有些用于IO::String或者IO::Scalar,其他一些只有低级文件句柄.所以我所做的就是创建的子类IO::Handle和IO::Seekable它就像周边的相应方法的包装DBD::Pg.在CTOR中,我创建了一个与数据库的连接,打开一些提供的LOID用于读取并存储Postgres在实例中提供的句柄.然后我自己的句柄对象被转发给能够使用这种文件句柄的人,并且可以直接在Postgres提供的blob中读取和搜索.
问题是使用低级文件句柄或低级文件句柄操作的库IO::Handle.Digest::MD5似乎是Archive::Zip另一个.Digest::MD5 croak并且告诉我没有提供句柄,Archive::Zip另一方面尝试从我的创建一个新的,自己的句柄,IO::Handle::fdopen在我的情况下调用和失败.
sub fdopen {
@_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
my ($io, $fd, $mode) = @_;
local(*GLOB);
if (ref($fd) && "".$fd =~ /GLOB\(/o) {
# It's a glob reference; Alias it as we cannot get name of anon GLOBs
my $n = qualify(*GLOB);
*GLOB = *{*$fd};
$fd = $n;
} …Run Code Online (Sandbox Code Playgroud)