小编Uno*_*nos的帖子

Perl的文件测试运算符-f为符号链接返回true

我曾经认为-f测试过一个文件,看看它是否是一个普通文件,而不是其他任何东西.但Perl的行为似乎有所不同.我查了一下perldoc条目,它说:

-f  File is a plain file.
Run Code Online (Sandbox Code Playgroud)

假设我有一个名为一个文件的目录file1,以及5个符号链接1 2 3 4 5,每个链接都指向file1,如下所示:

-rw-r--r-- file1
lrwxrwxrwx 1 -> file1
lrwxrwxrwx 2 -> file1
lrwxrwxrwx 3 -> file1
lrwxrwxrwx 4 -> file1
lrwxrwxrwx 5 -> file1
drwxr-xr-x ../
drwxr-xr-x ./
Run Code Online (Sandbox Code Playgroud)

如果我使用-type f过滤器在此目录上运行find ,它会按预期提供输出:

%  find . -type f
./file1
Run Code Online (Sandbox Code Playgroud)

但是当我使用-f运算符运行perl脚本时,它会提供以下输出:

%  ls | perl -e 'while(<>) { chomp; print "$_\n" if -f $_ }'
1
2
3
4
5
file1 …
Run Code Online (Sandbox Code Playgroud)

unix shell perl find

17
推荐指数
2
解决办法
4439
查看次数

任何ExtJS4布局的'flex'属性是什么意思?

我已经看过一些例子,其中一些数字是针对flex指定的,比如说

{text: 'Actual', xtype : 'gridcolumn', dataIndex: 'some_data', flex: 1}
Run Code Online (Sandbox Code Playgroud)

这个房产传达了什么?指定的文档有点难以理解,因此更简单的解释将有很大帮助!

javascript extjs4

9
推荐指数
1
解决办法
1万
查看次数

为什么IPC :: Open3会陷入僵局?

我浏览了open3的文档,这是我无法理解的部分:

如果你试图从孩子的stdout编写器和他们的stderr编写器中读取,你将遇到阻塞问题,这意味着你将要使用select()或IO :: Select,这意味着你最好使用sysread(而不是readline()用于普通的东西.

这是非常危险的,因为你可能永远阻止.它假设它会与bc这样的东西交谈,既写入它又从中读取.这可能是安全的,因为你"知道"像bc这样的命令会一次读取一行并一次输出一行.但是,排序等首先读取整个输入流的程序很容易导致死锁.

所以我试着open3希望更好地了解它.这是第一次尝试:

sub hung_execute {
    my($cmd) = @_;
    print "[COMMAND]: $cmd\n";
    my $pid = open3(my $in, my $out, my $err = gensym(), $cmd);
    print "[PID]: $pid\n";
    waitpid($pid, 0);
    if(<$err>) {
        print "[ERROR] : $_" while(<$err>);
        die;
    }
    print "[OUTPUT]: $_" while (<$out>);
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我必须$err在这里进行初始化.

无论如何,当我execute("sort $some_file");给出$some_file的文本文件包含超过4096个字符(我的机器的限制)时,这就会挂起.

然后我查看了这个 FAQ,下面是我的新版执行:

sub good_execute {
    my($cmd) = @_;
    print "[COMMAND]: $cmd\n";
    my $in = gensym();
    #---------------------------------------------------
    # using $in, …
Run Code Online (Sandbox Code Playgroud)

perl ipc

9
推荐指数
2
解决办法
2633
查看次数

在perl中,我们如何检测外部命令中的分段错误

以下是注定要崩溃的C代码:

#include<stdio.h>
#include<stdlib.h>

int main() {
    char *p = NULL;
    printf("Value at P: %c\n", *p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它(RH4机器与gcc 4.5.2)时,它可预测地给出了一个分段错误:

%  ./a.out
Segmentation fault

%  echo $status
139
Run Code Online (Sandbox Code Playgroud)

如果我使用Perl v5.8.5运行它,会发生这种情况:

%  perl -e 'system("./a.out") and die "Status: $?"'
Status: 11 at -e line 1.
Run Code Online (Sandbox Code Playgroud)

perlvar的文件$?说,

因此,子进程的退出值确实是($?>> 8 ),并$? & 127提供进程死亡的信号(如果有的话),并$? & 128 报告是否存在核心转储.

11 >> 8是的0,11 & 127是的11.

为什么不同的退出状态?如果我们不能依赖退出状态,那么在外部命令中检测分段错误的方法应该是什么?

perl

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

为什么我们需要在更改django项目中的某个文件后重启apache

我在Apache/mod_wsgi上的Windows 7上设置了Django.我需要停止,然后每次更改任何python代码时启动服务器.有没有办法避免它?

javascript/php更改不会发生这种情况,即,看到更改代码的效果不需要重启apache.向正确的方向推进将有很大帮助.谢谢!

apache django

6
推荐指数
2
解决办法
5916
查看次数

在Perl脚本中,我们应该使用shell命令还是调用模仿shell操作的Perl函数?

我想知道这里的最佳做法.假设我想获取文件某些行的内容.我可以使用单行shell命令来获取我的答案,或编写子程序,如下面的代码所示.

一个名为的文本文件some_text:

She laughed. Then both continued eating in silence, like strangers,
but after dinner they walked side by side; and there sprang up
between them the light jesting conversation of people who are free
and satisfied, to whom it does not matter where they go or what
they talk about.
Run Code Online (Sandbox Code Playgroud)

用于获取文件第5行内容的代码

#!perl
use warnings;
use strict;

my $file = "some_text";
my $lnum = 5;
my $shellcmd = "awk 'NR==$lnum' $file";
print qx($shellcmd);
print getSrcLine($file, $lnum);

sub getSrcLine …
Run Code Online (Sandbox Code Playgroud)

shell perl

5
推荐指数
1
解决办法
765
查看次数

Perl中的负面观察断言

我有一组文件路径,我想列出所有不包含的文件路径x/y/z/.另一个限制是我无法使用,print if !m{x/y/z/}因为我没有对脚本的写权限.我可以为脚本提供regexp模式以包含(作为命令行选项),即匹配的所有内容都将被打印.

这是我的尝试.我想匹配的行具有x/y/z/在他们面前.

#!/usr/bin/perl
use warnings;
use strict;

while(<DATA>) {
   print if m{(?<!x/y/z/).*};
}

__DATA__
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/a/b/m.cc
x/y/a/b/m.cc
Run Code Online (Sandbox Code Playgroud)

我的期望是它只打印底部的两个字符串,但它会打印所有内容.但是当我将模式更改为时(?<=x/y/z/).*,它只打印前3个字符串:

x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
Run Code Online (Sandbox Code Playgroud)

为什么这样,我该怎么做来修复我的正则表达式?

regex perl

5
推荐指数
1
解决办法
1216
查看次数

通过worksheet.insert_image插入时设置图像的宽度和高度

docs开始,该insert_image函数采用以下选项:

{
    'x_offset':    0,
    'y_offset':    0,
    'x_scale':     1,
    'y_scale':     1,
    'url':         None,
    'tip':         None,
    'image_data':  None,
    'positioning': None,
}
Run Code Online (Sandbox Code Playgroud)

问题是我需要插入的输入图像的大小可以变化,但是需要插入的单元格的大小是固定的。是否可以以某种方式提供宽度和高度,并让Excel将图像调整为提供的尺寸?

python excel xlsxwriter

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

在Perl替换表达式中连接字符串

我有一个重复模式的字符串,我想用另一个字符串替换每个这种模式.替换字符串是通过连接一组其他字符串形成的.一个例子如下.我首先尝试使用.运算符连接,如图所示.

但是输出包含点本身,因此Perl不会将其视为运算符,而是文字..

#!/usr/bin/perl
use warnings;
use strict;

my $start = 'not-so-';
my $end = '-but-a-little-bad';
my $string = 'I am a good boy. Infact I am a very good boy';
print "Before: $string\n";
>>>> $string =~ s/(good)/$start.$1.$end/g;
print "Later : $string\n";
Run Code Online (Sandbox Code Playgroud)

所以我删除了.s,我的声明变成了$string =~ s/(good)/$start$1$end/g;,输出是按照期望的.但是,我觉得这样的声明可能会导致以后的维护问题.

我的问题:是否有更好的方法来连接除此之外的字符串?

perl

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

守护进程模式下 mod_wsgi 的 Django 站点中出现导入错误

我正在尝试运行在同一VirtualHost. 其中一个应用程序是此处myapp指定的标准 hello-world 代码。它加载得非常好。另一个应用程序是 Django 网站。它失败并显示.uiappImportError

我在wsgi 文档中读到, 的值python-path附加到sys.path,所以这就是我在WSGIDaemonProcessfor中指定的值uiapp

我无法确定问题是出在 Python 代码上还是 Apache 配置上。

这是我的虚拟主机配置:

    [ . . . ]

    # processGroups
    WSGIProcessGroup uiapp
    WSGIProcessGroup myapp

    # configurations for django sites
    WSGIScriptAlias /uiapp "/some/path/ui_dir/site_prod/wsgi.py"
    WSGIScriptAlias /myapp "/some/other/path/myapp.wsgi"

    # daemons
    WSGIDaemonProcess uiapp processes=2 threads=25 display-name=site_prod_wsgi python-path=/some/path/ui_dir
    WSGIDaemonProcess myapp processes=2 threads=25 display-name=helloworld_wsgi

    # doc root for /uiapp
    <Directory "/some/path/ui_dir/site_prod">
        Order allow,deny
        Allow from all
    </Directory>

    # …
Run Code Online (Sandbox Code Playgroud)

python apache django mod-wsgi

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

Perl - 将引用传递给子例程

我很难理解perl中的引用.这是一个简短的perl脚本来解释我的问题[我使用perl-5.8.3运行此代码]:

#!/usr/bin/perl -w
use strict;
use Data::Dumper;

my %a = ("a" => 1, "b" => 2);
my %b = ();
print Dumper(\%a, \%b);
foo(\%a, \%b);
print "+==After fn call==+\n";
print Dumper(\%a, \%b);
print "+-----------------------+\n";
bar(\%a, \%b);
print "+==After fn call==+\n";
print Dumper(\%a, \%b);

sub foo {
    my($h1, $h2) = @_;
    $h2 = $h1;
    print Dumper($h2);
}

sub bar {
    my($h1, $h2) = @_;
    %{$h2} = %{$h1};
}
Run Code Online (Sandbox Code Playgroud)

我想在两个子程序中,$ h1和$ h2都是本地变量.仍然,bar()实际上改变了原始%b的值,而foo()则没有.这是为什么?

perl pass-by-reference

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