小编Dan*_*ung的帖子

Python:检查方法是否是静态的

假设以下类定义:

class A:
  def f(self):
    return 'this is f'

  @staticmethod
  def g():
    return 'this is g'

a = A() 
Run Code Online (Sandbox Code Playgroud)

所以f是常规方法,g是静态方法.

现在,我如何检查ffion对象af和ag是否是静态的?Python中有"isstatic"功能吗?

我必须知道这一点,因为我有包含许多不同函数(方法)对象的列表,并且要调用它们我必须知道它们是否期望"自我"作为参数.

python static-methods

13
推荐指数
4
解决办法
5050
查看次数

在多索引数据帧上使用 groupby/apply 时索引级别加倍

在 a 上使用groupby/apply链时遇到问题MultiIndex DataFrame:生成的数据框包含两次分组级别!

示例数据框:

df = pandas.DataFrame(dict(a=[1, 2, 3, 4, 5, 6], b=[6, 7, 8, 9, 0, 0]),
                      index=pandas.MultiIndex.from_product([[1, 2], [3, 4, 5]]))

     a  b
1 3  1  6
  4  2  7
  5  3  8
2 3  4  9
  4  5  0
  5  6  0
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我只是对行求和(我实际上有另一个函数,但它也接受并返回一个数据帧):

df.groupby(level=0).apply(lambda x: x.sum(axis=1))
Run Code Online (Sandbox Code Playgroud)

它给了我以下结果:

1  1  3     7
      4     9
      5    11
2  2  3    13
      4     5
      5     6
dtype: int64
Run Code Online (Sandbox Code Playgroud)

所以现在我有三个索引级别,其中一个按加倍分组。当我按两个级别分组时,整个多索引翻了一番:

df.groupby(level=[0,1]).apply(lambda x: x.sum(axis=1))

1 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

通过ssh获取通过nohup启动的进程的PID

我想通过ssh在远程计算机上使用nohup启动进程.问题是如何使用nohup启动进程的PID,因此"进程实际上正在做某事",而不是某些外壳实例等.另外,我想将stdout和stderr存储在文件中,但这不是问题所在......

在本地,它完美无瑕地使用

nohup sleep 30 > out 2> err < /dev/null & echo $!
Run Code Online (Sandbox Code Playgroud)

它回应了我命令"sleep 30"的确切PID,我也可以看到使用"top"或"ps aux | grep sleep".

但我无法通过ssh远程执行此操作.我试过类似的东西

ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null'
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚在哪里放置"echo $!" 以便它显示在我的本地shell中.它总是向我显示错误的PID,例如"bash"实例之一等.

有人知道如何解决这个问题吗?

编辑:好的,这里可能不需要"bash -c".就像Lotharyx指出的那样,我得到了正确的PID

ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'
Run Code Online (Sandbox Code Playgroud)

但问题是,如果你用产生输出的东西代替"sleep 30",比如"echo Hello World!",那么输出不会在文件"out"中结束,既不在本地也不在远程.有人知道为什么?

编辑2:我的错!另一台设备上没有剩余空间,这就是文件"out"和"err"保持空的原因!

所以这是有效的.另外,如果想要连续调用多个命令,用分号(;)分隔,则仍然可以使用"bash -c",如下所示:

ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < …
Run Code Online (Sandbox Code Playgroud)

ssh bash pid nohup

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

bash-program"watch"和输出中的ANSI转义序列

可能重复:
使用unix命令"watch"的颜色?

在我的一个程序中,我想使用彩色文本作为输出,所以我使用ANSI转义序列,例如:

echo -e '\033[34mHello World\033[0m'
Run Code Online (Sandbox Code Playgroud)

它以蓝色打印"Hello World".(实际上它是一个使用"print"的Python程序,但这对问题无关紧要)

现在我想使用bash程序"watch"重复执行程序.但是当我使用"watch"执行与上面相同的行时,即

watch echo -e '\033[34mHello World\033[0m'
Run Code Online (Sandbox Code Playgroud)

文本不是蓝色,输出变为"-e 033 [34mHello World033 [0m".因此ANSI转义序列不会以某种方式解码.

有没有办法使程序"观察"尊重逃脱序列,或者是否有"观察"的替代方案来获得相同的效果?

如果它仅适用于Linux,那就没关系,因为我只使用它.

更新:所以一个解决方案是安装一个知道--color选项的更新版本的"watch".但还有其他任何方式,也许是一个类似的"观看"节目?(我不是那台机器的管理员.)

linux bash watch ansi-escape

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

普通模式下"d"可以跟什么?

在回答这个问题时,我了解到可以使用dip正常模式下的键序列删除光标周围的所有空行.惊讶的是,我调查了vim的帮助,但vim帮助只说d可能后面跟着一个动作,显然i不是(它会带你正常插入模式).

  1. 究竟在dip做什么?在这种情况下,做什么ip代表什么?
  2. 我在哪里可以找到它?还有哪些"神奇"角色可以效仿d

vim

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

标签 统计

bash ×2

python ×2

ansi-escape ×1

linux ×1

nohup ×1

pandas ×1

pid ×1

ssh ×1

static-methods ×1

vim ×1

watch ×1