小编ama*_*ain的帖子

如何让期望-c在单行而不是脚本中工作

运行:

my_machine~/opt/ams/data/ep/success$ expect -c "spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml; expect { '*password:*' { send 'ad'\r\n }}"
Run Code Online (Sandbox Code Playgroud)

似乎没有工作,因为我仍然被要求输入密码.

spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
adaptive@10.10.12.17's password: 
Run Code Online (Sandbox Code Playgroud)

如果我以ascript运行它运行正常.

my_machine~/opt/ams/data/ep/success$ ./try.sh
spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
adaptive@10.10.12.17's password:
xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml                                                                      100%   13MB  13.2MB/s   00:01
my_machine~/opt/ams/data/ep/success$ cat try.sh
#!/bin/bash
expect -c "
        spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
        expect {
          "*password:*" { send "ad"\r\n; interact }
          eof { exit }
        }
        exit
        "

my_machine~/opt/ams/data/ep/success$
Run Code Online (Sandbox Code Playgroud)

我想在一行命令而不是脚本中运行它.有没有人有任何想法?

提前致谢

一个

我在下面回答了我自己的问题

shell command-line scp expect

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

webdriver等待多个元素之一出现

有没有办法让a webDriverWait等待一些元素出现,并根据出现的元素采取相应的行动?

目前我WebDriverWait在try循环中执行一个操作,如果发生超时异常,我会运行替代代码,等待另一个元素出现.这看起来很笨拙.有没有更好的办法?这是我(笨拙)的代码:

try:
    self.waitForElement("//a[contains(text(), '%s')]" % mime)
    do stuff ....
except TimeoutException:
    self.waitForElement("//li[contains(text(), 'That file already exists')]")
    do other stuff ...
Run Code Online (Sandbox Code Playgroud)

它需要等待整整10秒才能查看该文件是否已存在于系统上的消息.

该函数waitForElement只执行了许多WebDriverWait调用:

def waitForElement(self, xPathLocator, untilElementAppears=True):
    self.log.debug("Waiting for element located by:\n%s\nwhen untilElementAppears is set to %s" % (xPathLocator,untilElementAppears))
    if untilElementAppears:
        if xPathLocator.startswith("//title"):
            WebDriverWait(self.driver, 10).until(lambda driver : self.driver.find_element_by_xpath(xPathLocator))
        else:
            WebDriverWait(self.driver, 10).until(lambda driver : self.driver.find_element_by_xpath(xPathLocator).is_displayed())
    else:   
        WebDriverWait(self.driver, 10).until(lambda driver : len(self.driver.find_elements_by_xpath(xPathLocator))==0)
Run Code Online (Sandbox Code Playgroud)

有人建议以更有效的方式完成这项工作吗?

python selenium webdriver wait selenium-webdriver

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

仅当属性为 null 时,如何从 lombok 构建器中排除该属性

我有一个用户模型类,如下所示:

@JsonSerialize
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
@Builder
public class User {
    @Default
    String _dn = BASE_USER_DN;
    @Default
    String[] objectClass = {"top", "person", "organizationalPerson", "inetOrgPerson", "companyUser"};
    @Default
    String[] cn = {"user205"};
    @Default
    String[] sn = {"Dynamic2"};
    @Default
    String[] username = {"LindaDynamic2"};
}
Run Code Online (Sandbox Code Playgroud)

现在我想生成一个省略空字段的用户对象,因此:

userBody = User.builder().cn(null).build();
Run Code Online (Sandbox Code Playgroud)

将创建一个没有 cn 属性的对象,或者如果我添加了一个没有默认值的字段并且它没有在构建器上设置,它将被省略。

这可能吗?

java builder lombok

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

为什么firefox不会在redhat 5.6上的selenium 2 webdriver下启动

我想知道是否有人有任何想法,我怎么能找到为什么我似乎让firefox运行通过selenium webdriver.当我跑步时会发生什么:

self.driver=webdriver.Firefox()
Run Code Online (Sandbox Code Playgroud)

我的桌面上有一个空白的对话框.我在Redhat 5.6上运行,我的selenium版本是2.21.3.我尽可能地调试代码,并在firefox_binary模块中的以下代码上显示空白对话框后,我可以确定代码冻结:

Popen([self._start_cmd, "-slient"], stdout=PIPE, stderr=STDOUT, env=self._filefox_env).wait()
Run Code Online (Sandbox Code Playgroud)

我打开了一个cmd提示符并手动运行上面提到的命令,没有出现这样的空白对话框.这会让我觉得它不是一个firefox错误.我无法找到出现此错误的位置.有任何想法吗?

更新

我安装了centos 6并安装了firefox 10.0.6和selenium webdriver使用该版本

更新

除了使用centos 6我还需要在redhat上解决这个问题,所以这里有更多细节和我发现的内容.因为需要解决,我会对此给予赏金:

我在这上面挖了一点,发现问题在于使用32位lib的selenium.我使用Firefox ESR 10.0.6(64位)在Redhat Enterprise Linux Server 5.6(x86_64)上安装了selenium 2.25.0版.我更改了firefoxBinary类中的_start_from_profile_path方法,以查看问题所在:

p=open("/tmp/ffoutput.txt", "w+")
Popen([self._start_cmd, "-silent"], stdout=p, stderr=STDOUT, env=self._firefox_env).communicate()
Run Code Online (Sandbox Code Playgroud)

我发现/tmp/ffoutput.txt我发现selenium试图使用32位的lib:

Failed to dlopen /usr/lib/libX11.so.6
dlerror says: /usr/lib/libX11.so.6: wrong ELF class: ELFCLASS32
Run Code Online (Sandbox Code Playgroud)

此消息不断发生,firefox挂起,显示空白对话框.我搜索了这个问题并发现有些人抱怨但没有解决方案有效(我尝试将64位lib软件链接到32位lib目录后移动32位lib但这导致geko崩溃,我尝试将连续错误发送到/ dev/null但这没有解决任何问题).

firefox selenium redhat webdriver

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

Wraps 在装饰器中使用时会出现 TypeError

我创建了一个装饰器来打印它所装饰的函数的名称并且它可以工作:

>>> def debug(func):
...    msg=func.__qualname__
...    def wrapper(*args, **kwargs):
...       print(msg)
...       return func(*args, **kwargs)
...    return wrapper
... 
>>> @debug
... def add(x, y):
...    return x+y
... 
>>> add(1,2)
add
3
Run Code Online (Sandbox Code Playgroud)

现在我想将 wraps 装饰器应用于包装器,但是当我这样做时,我收到错误“TypeError: update_wrapper() got multiple values for argument 'wrapped'”

>>> from functools import wraps
>>>
>>> def debug(func):
...    msg=func.__qualname__
...    @wraps
...    def wrapper(*args, **kwargs):
...       print(msg)
...       return func(*args, **kwargs)
...    return wrapper
... 
>>> @debug
... def add(x, y):
...    return x+y …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-decorators

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

键是索引的熊猫石斑鱼问题

我有一个如下形式的熊猫数据框:

                Response
Time    
2018-01-14 00:00:00 201
2018-01-14 00:00:00 400
2018-01-14 00:00:00 200
2018-01-14 00:00:00 400
2018-01-14 00:00:00 200
Run Code Online (Sandbox Code Playgroud)

时间是索引列。

我想获得随时间(15 分钟间隔)分组的响应图表,所以我写了以下内容:

for ind, itm in enumerate(df_final['Response'].unique()):
    ax=df_final[df_final['Response'] == itm].groupby(pd.Grouper(key='Time',freq='15Min')).count().plot(kind='bar', figsize=(15,10), title="Response Codes")
    ax.legend(["Response: {}".format(itm)])
Run Code Online (Sandbox Code Playgroud)

这与折旧的 TimeGrouper 一起使用,上面代码中的第二行是:

ax=df_final[df_final['Response'] == item].groupby(pd.TimeGrouper(freq='15Min')).count().plot(kind='bar', figsize=(15,10), title="Response Codes")
Run Code Online (Sandbox Code Playgroud)

但是当我运行 Grouper 代码时出现错误:

KeyError: 'The grouper name Time is not found'
Run Code Online (Sandbox Code Playgroud)

我还将密钥更改为 df_final.index.name 但这也导致了 KeyError: 'The grouper name Time is not found'

该索引的类型为 index,但我将其更改为 DatetimeIndex:

type(df_final.index)

pandas.core.indexes.datetimes.DatetimeIndex
Run Code Online (Sandbox Code Playgroud)

在我更改索引类型并运行后:

ax=df_final[df_final['Response'] == itm].groupby(pd.Grouper(key=df_final.index, freq='15Min')).count().plot(kind='bar', figsize=(15,10), title="Response Codes")
Run Code Online (Sandbox Code Playgroud)

我有:

TypeError: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

5
推荐指数
2
解决办法
8134
查看次数

命令与子进程

只是想知道是否有人能告诉我原因

import subprocess, commands

p=subprocess.Popen(["ls", "*00080"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output=p.communicate()[0]
print "o", output
result=commands.getoutput("ls *00080")
print "o", result
Run Code Online (Sandbox Code Playgroud)

给出输出:

o ls: cannot access *00080: No such file or directory

o 010.010.013.165.42974-010.010.013.164.00080
Run Code Online (Sandbox Code Playgroud)

两者都应该找不到它们的文件?

一个

python subprocess

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

使用awk检查两个日期

我有一个包含多个数据结构的文件,如下所示:

eventTimestamp: 2010-03-23T07:56:19.166
result: Allowed
protocol: SMS
payload: RCOMM_SMS

eventTimestamp: 2010-03-23T07:56:19.167
result: Allowed
protocol: SMS
payload: RCOMM_SMS

eventTimestamp: 2010-03-23T07:56:19.186
result: Allowed
protocol: SMS
payload: SMS-MO-FSM

eventTimestamp: 2010-03-23T07:56:19.197
result: Allowed
protocol: SMS
payload: COPS

eventTimestamp: 2010-03-23T07:56:29.519
result: Blocked
protocol: SMS
payload: COPS
type: URL_IWF
result: Blocked
Run Code Online (Sandbox Code Playgroud)

我想找到有效载荷的所有事件:SMS-MO-FSM或有效载荷:在2010-03-23 12:56:47和2010-03-23 13之间发生的SMS-MO-FSM-INFO: 56:47.到目前为止查询此文件时,我已按以下方式使用awk:

cat checkThis.txt |
awk 'BEGIN{FS="\n"; RS=""; OFS=";"; ORS="\n"}
     $1~/eventTimestamp: 2010-03-23T14\:16\:35/ && $4~/SMS-MO-FSM-INFO|SMS-MO-FSM$/ {$1=$1 ""; print $0}'
Run Code Online (Sandbox Code Playgroud)

这将为我提供2010-03-23 14:16:35第二次发生的所有事件.但是,我正在努力思考如何将日期范围放入我的查询中.我可以使用以下内容将日期放入纪元时间但是如何在我的awk中使用以下内容来检查日期是否在所需的时间之间:

python -c "import time; ENGINE_TIME_FORMAT='%Y-%m-%dT%H:%M:%S'; print int(time.mktime(time.strptime('2010-03-23T12:52:52', ENGINE_TIME_FORMAT)))"
Run Code Online (Sandbox Code Playgroud)

我知道这可以在Python中完成,但我已经在Python中编写了一个解析器,我希望这个方法作为替代检查器,所以我想尽可能使用awk.

我更进一步,创建了一个时间转换的python脚本:

#!/usr/local/bin/python
import time, …
Run Code Online (Sandbox Code Playgroud)

linux shell awk parsing

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