小编Tom*_*ime的帖子

在python中,super()总是在方法中首先被调用.有没有应该稍后调用的情况?

在调用super()之前是否存在要进行某些处理的情况?

这是一个人为的例子.有更好的例子吗?这被认为是pythonic吗?

class Base(object):
    def __init__(self, name):
        print "Base %s created" % name
        self._name = name

class UpperBase(A):
    """ Similar to base but the name is in uppercase. """
    def __init__(self, name):
        name = name.upper() 
        super(UpperBase, self).__init__(name)
Run Code Online (Sandbox Code Playgroud)

python super

29
推荐指数
1
解决办法
4882
查看次数

在python中,在与另一个文件相同的目录中创建一个临时文件?

我需要更新一个文件.我读了它,并写出来的变化.但是,我更愿意写入临时文件并将其重命名.

temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
Run Code Online (Sandbox Code Playgroud)

问题是tempfile.NamedTemporaryFile()使临时文件中的/tmp文件系统不同.这意味着os.rename()失败.如果我使用shlib.move()而不是我没有"mv"提供的原子更新(对于同一文件系统中的文件,yadda,yadda等)

我知道tempfile.NamedTemporaryFile()带一个"dir"参数,但data_file_name可能是"foo.txt",在这种情况下dir ='.'; 或者data_file_name可能是" /path/to/the/data/foo.txt",在这种情况下dir =" /path/to/the/data".

我真正喜欢的是临时文件是data_file_name +"一些随机数据".这样做的好处是会以一种留下有用线索的方式失败.

建议?

python file temporary-files

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

子命令后允许argparse全局标志

我正在使用argparse构建一个带有子命令的命令:

mycommand [GLOBAL FLAGS]子命令[FLAGS]

我希望全局标志能够工作,无论它们是在子命令之前还是之后.有没有一个干净的方法来做这个不涉及重复代码?

例如:

  parser = argparse.ArgumentParser()
  subparsers = parser.add_subparsers(dest='subparser_name')

  parser.add_argument('--disable')    # This flag...

  sp = subparsers.add_parser('compile')
  sp.add_argument('zones', nargs='*')
  sp.add_argument('--disable')        # Is repeated...

  sp = subparsers.add_parser('launch')
  sp.add_argument('zones', nargs='*')
  sp.add_argument('--disable')        # over and over...
Run Code Online (Sandbox Code Playgroud)

我想为许多旗帜做这件事,所以一遍又一遍地重复自己似乎...... unpythonic.

python argparse

12
推荐指数
1
解决办法
1091
查看次数

如何从 Go 更快地调用 Powershell?

用 Go 编写的程序通过 shell 执行 PowerShell 来完成某些任务。这很慢,因为每次调用都会exec.Command()启动 PowerShell,运行一个命令,然后退出。我们正在运行数百个命令,并且启动 PowerShell 数百次是一个很大的开销。

如果提前知道命令,我们可以简单地生成 powershell 脚本并执行它。然而,需要运行的命令是动态生成的,因此这对我们不起作用。

这是我们用来运行的代码command

  out, err := exec.Command("powershell", "-NoProfile", command).CombinedOutput()
  if err != nil {
    // ...
  }
Run Code Online (Sandbox Code Playgroud)

是否可以启动一次 PowerShell 并为其提供单独的命令?

更新:有人问我正在运行哪些 PS 命令。有些是:

  • Get-DnsServerResourceRecord -ComputerName FOO -ZoneName BAR
  • Remove-DnsServerResourceRecord -Force -ComputerName "FOO" -ZoneName "BAR" -Name "X" -RRType "Y" -RecordData "Z"
  • Add-DnsServerResourceRecordX-ComputerName FOO -ZoneName BAR ...

2022-03-09 更新:我很不好意思地说,我发现了缓慢问题,而且这并不是我提出问题时所假设的。正在运行的 PowerShell 命令偶尔会获取需要很长时间才能处理的庞大数据集。所以,问题根本不在于 Go 或 exec!也就是说,这个问题对于想要批量命令的人来说仍然有用。

powershell go

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

Python 是否具有 Perl 的 Deparse 等价物?

从 Perl 迁移到 Python 后,我想念的一件事是“Deparse”。它不仅重新格式化 perl 代码,而且减少了括号的数量,甚至将旧功能更改为等效的新功能。

例如:

$ perl -MO=Deparse -e 'if (($x == $b) || ($foo == $bar )) { &thing };'
if ($x == $b or $foo == $bar) {
    &thing;
}
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

Python有没有类似的东西?

python perl

5
推荐指数
0
解决办法
275
查看次数

如何安全地引用可选标志?

如果$FOO设置,我想运行:

cd "$OUTPUTDIR" && fpm -s dir -t rpm \
  -a x86_64 \
  --epoch "${PKGEPOCH}" \
  -n "${PACKAGENAME}" \
  --version "${PKGVERSION}" \
  --iteration "${PKGRELEASE}" \
  -C "$OUTPUTDIR/installroot" \
  --description="${PKGDESCRIPTION}" \
  .
Run Code Online (Sandbox Code Playgroud)

如果$FOO没有设置,我根本不想包含该标志.

如果--description=(空),程序将失败.

但是,有时描述包括引号和其他特殊字符,所以我不想这样做:

if [[ -z "PKGDESCRIPTION" ]]; then
    D=--description="${PKGDESCRIPTION}"
fi
cd "$OUTPUTDIR" && fpm -s dir -t rpm \
  -a x86_64 \
  --epoch "${PKGEPOCH}" \
  -n "${PACKAGENAME}" \
  --version "${PKGVERSION}" \
  --iteration "${PKGRELEASE}" \
  -C "$OUTPUTDIR/installroot" \
  $D
  .
Run Code Online (Sandbox Code Playgroud)

如果我把引号括起来$D那么它就变成了一个额外的(空白)arg. …

bash

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

golang基准测试可以提供自定义输出吗?

我使用不同的列表大小对代码进行基准测试(大小为S的列表)Go基准测试显示ns/op,但我想要的是(ns/op)/ S.

换句话说,输出go test -bench=.是:

BenchmarkMy10-4         100000000           15.7 ns/op
BenchmarkMy20-4         50000000            33.8 ns/op
BenchmarkMy30-4         30000000            43.8 ns/op
BenchmarkMy40-4         30000000            49.3 ns/op
BenchmarkMy50-4         30000000            56.6 ns/op
BenchmarkMy1000-4        2000000           686 ns/op
BenchmarkMy10000-4        200000          6685 ns/op
BenchmarkMy100000-4        20000         65425 ns/op
Run Code Online (Sandbox Code Playgroud)

"My10"中的"10"表示10个项目的列表(S = 10).

虽然知道不同列表大小的ns/op很有用,但我还想知道ns/op/S(列表中每个项目的时间).

现在我将结果粘贴到电子表格中并在那里进行数学运算.但是,我希望"go test"为我输出这些信息.

我的main_test.go文件如下所示:

import "testing"

var result int

func benchmarkMy(i int, b *testing.B) {
  var r int
  mylist := MakeList(i)
  b.ResetTimer()
  for n := 0; n < b.N; n++ {
    r = My(mylist)
  }
  result = r …
Run Code Online (Sandbox Code Playgroud)

benchmarking go

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

最简洁的Perl解析器,用于类似Makefile的延续线

我正在编写的perl脚本需要解析一个包含Makefile等延续行的文件.即以空格开头的行是前一行的一部分.

我写下面的代码,但不觉得它很干净或perl-ish(哎呀,它甚至不使用"重做"!)

有许多边缘情况:奇数位置的EOF,单行文件,以空行(或非空白行或连续行)开头或结尾的文件,空文件.我的所有测试用例(和代码)都在这里:http://whatexit.org/tal/flatten.tar

你能编写更清晰的perl-ish代码,通过我所有的测试吗?

#!/usr/bin/perl -w

use strict;

sub process_file_with_continuations {
    my $processref = shift @_;
    my $nextline;
    my $line = <ARGV>;

    $line = '' unless defined $line;
    chomp $line;

    while (defined($nextline = <ARGV>)) {
        chomp $nextline;
        next if $nextline =~ /^\s*#/;  # skip comments
        $nextline =~ s/\s+$//g;  # remove trailing whitespace
        if (eof()) {  # Handle EOF
            $nextline =~ s/^\s+/ /;
            if ($nextline =~ /^\s+/) {  # indented line
                &$processref($line . $nextline);
            }
            else {
                &$processref($line); …
Run Code Online (Sandbox Code Playgroud)

perl redo fileparsing

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

如何在bash中保存您将要执行的命令?

有没有更好的方法在执行之前保存命令行?

我的许多 /bin/bash 脚本构建了一个很长的命令行。我通常将命令行保存到文本文件中,以便于调试和(有时)执行。

我的代码到处都是这个习语:

echo >saved.txt cd $NEW_PLACE '&&' command.py --flag $FOO $LOTS $OF $OTHER $VARIABLES
                cd $NEW_PLACE && command.py --flag $FOO $LOTS $OF $OTHER $VARIABLES
Run Code Online (Sandbox Code Playgroud)

显然,在两个地方更新代码很容易出错。不太明显的是,某些部分需要在第一行引用,但不需要在下一行引用。因此,我无法通过简单的复制粘贴来进行更新。如果命令包含引号,它会变得更加复杂。

必须有更好的方法!建议?

debugging bash

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

在Mac OS X上的Makefile中设置PATH(但它适用于Linux)

我可以在Linux上的Makefile中设置PATH,但不能在Mac OS X中设置.在OS X中,PATH设置但不会被使用.这是一个演示:

在CentOS 6上使用bash 4.1.2(1)-release和GNU Make 3.81

$ pwd
/tmp/experiment
$ find * -type f -ls
132133    4 -rw-rw-r--   1 tlim tlim      113 Aug 26 11:01 Makefile
132132    4 -rwxrwxr-x   1 tlim tlim       28 Aug 26 10:59 bin/myprog
$ cat Makefile 
export PATH := $(shell /bin/pwd)/bin:$(PATH)

what:
    @echo PATH=$$PATH
    @echo PATH=$(PATH)
    which myprog
    myprog
$ cat bin/myprog 
#!/bin/bash
echo HERE I AM.
$ make what
PATH=/tmp/experiment/bin:/usr/stack/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
PATH=/tmp/experiment/bin:/usr/stack/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
which myprog
/tmp/experiment/bin/myprog
myprog
HERE I AM.
Run Code Online (Sandbox Code Playgroud)

这是使用GNU Make 3.81在Mac OS …

macos makefile gnu-make

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