假设以下类定义:
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"功能吗?
我必须知道这一点,因为我有包含许多不同函数(方法)对象的列表,并且要调用它们我必须知道它们是否期望"自我"作为参数.
在 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) 我想通过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) 可能重复:
使用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".但还有其他任何方式,也许是一个类似的"观看"节目?(我不是那台机器的管理员.)
在回答这个问题时,我了解到可以使用dip正常模式下的键序列删除光标周围的所有空行.惊讶的是,我调查了vim的帮助,但vim帮助只说d可能后面跟着一个动作,显然i不是(它会带你正常插入模式).