标签: wait

bash:在继续之前等待特定的命令输出

我知道有几个帖子问类似的问题,但没有一个解决我遇到的问题。

我正在处理一个脚本,该脚本处理与不同Bluetooth low energy设备的连接,使用它们的一些句柄读取gatttool并动态创建一个.json包含这些值的文件。

我遇到的问题是gatttool命令需要一段时间才能执行(并且由于device is busy或类似的消息并不总是成功连接到设备)。这些“错误”不仅转换为错误的数据以填充.json文件,而且还允许脚本行继续写入文件(例如添加额外的}或类似的)。我正在使用的命令示例如下:

sudo gatttool -l high -b <MAC_ADDRESS> --char-read -a <#handle>
Run Code Online (Sandbox Code Playgroud)

我怎样才能以一种可以等待某个输出的方式来解决这个问题?在这种情况下,--char-read使用时的理想输出gatttool是:

Characteristic value/description: some_hexadecimal_data`
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以确保我是逐行跟踪脚本而不是进行这些“跳转”。

bash wait bluetooth-lowenergy

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

Selenium 等待不等待元素可点击

我有一个动态加载的页面并包含一个按钮。我正在尝试等待使用 C# 绑定使用 selenium 单击该按钮。我有以下代码:

WebDriverWait wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(30));
        wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("addInspectionButton")));

        var button = Driver.Instance.FindElement(By.Id("addInspectionButton"));
        button.Click();
Run Code Online (Sandbox Code Playgroud)

虽然这不起作用。click 事件永远不会被触发。selenium 脚本不会抛出异常,提醒 ID 为“addInspectionButton”的元素不存在。它只是无法点击它。如果我在等待语句和我获得按钮元素句柄的行之间添加一个 Thread.Sleep(3000) ,它会起作用。

我在这里没有正确使用 ExpectedConditions.ElementToBeClickable 吗?

c# selenium wait

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

Python - 等待远程系统启动的最佳方法

我正在使用 LAN 唤醒在 python 脚本中启动某个服务器。

当我可以成功执行 API 请求时,服务器就在线,例如:

return requests.get(
        url + path,
        auth=('user', user_password),
        headers={'Content-Type':'application/json'},
        verify=False,
        timeout=0.05
    ).json()
Run Code Online (Sandbox Code Playgroud)

等待服务器启动过程(直到可以通过 API 访问)而不用循环请求向网络发送垃圾邮件的最佳方法是什么?

python wait python-requests

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

关于 wait() 和 waitpid()

所以我在 C 上写了这段代码。我创建了一个父亲,它有两个子进程,其中一个变成了僵尸进程。一秒钟后它退出了,正在等他的父亲结束了。另一个子进程保持孤立状态,然后结束。我的问题是,如果我更改waitfor会发生什么waitpid

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t pid;
    int status, value;

    pid = fork();

    if (pid > 0) { // Father

        pid = fork();

        if (pid > 0) { // Father
            wait(&status);
            value = WEXITSTATUS(status);

            if (value == 2)
                printf("Child 2");
            else if (value == 3)
                printf("Child 1");

        } else if (pid == 0) { //Child 2 - Orphan
            sleep(4);
            exit(2);

        } else {
            exit(1);
        } …
Run Code Online (Sandbox Code Playgroud)

c wait waitpid

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

wait(NULL) 究竟是如何工作的?

如果我使用wait(null),并且我知道(肯定)子wait(null)进程会在我们到达父进程之前完成(退出),那么父进程是否会wait(null)阻塞?我的意思是,wait()不会得到任何信号吧?

int main() {
   int pipe_descs[2] ;
   int i, n, p ;

   srand(time(NULL(  ;
   pipe(pipe_descs) ;

   for (i = 0; i < 2; i++) {
           pid_t status = fork() ;

           if (status == 0) {
                 n = rand() % 100;
                 p = (int) getpid() ;

                 write(pipe_descs[1],  &n,  sizeof(int)) ;
                 write(pipe_descs[1],  &p,  sizeof(int)) ;
                 exit(0) ;
            }
           else {
               read(pipe_descs[0],  &n,  sizeof(int)) ;
               read(pipe_descs[0],  &p,  sizeof(int)) ;
               printf(" %d %d\n", n, p) ; …
Run Code Online (Sandbox Code Playgroud)

c fork wait

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

在测试过程中更改 Selenium 隐式等待

我知道,根据一些意见,在完美的情况下,我不应该使用隐式等待。但是我的用户界面很慢;将显式等待添加到所有可能发生渲染的地方将是一项相当大的努力。在驱动程序初始化时设置的标准隐式等待时间为 20 秒,完美地涵盖了 80% 的等待时间。

但接下来我需要处理剩下的 20%。有时我需要等待一个元素消失 - 在这种情况下,隐式等待意味着额外的 20 秒。有时我需要检查一个元素是否存在,但不需要等待 20 秒(因为该元素通常不在正常执行流程中)。

所以,我自然想暂时禁用隐式等待:

driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
new WebDriverWait(driver, MY_TIMEOUT)).until(ExpectedConditions.WHATEVER_I_NEED);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

但这会稳定吗?或者更改隐式等待(在这种情况下,从 20 到 0 再回到 20)是否有某种危险?

java selenium wait selenium-webdriver

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

等待信号,然后继续执行

我正在尝试制作一个暂停执行直到信号到达的程序。然后,在信号到达后,我只希望我的代码从它所在的位置继续执行。我不希望它执行函数处理程序或其他任何东西。有没有一种简单的方法可以做到这一点?我已经挣扎了一个星期左右,到处阅读,并没有设法获得一个完全可操作的代码。

特别是,我希望主程序创建一个线程来等待某个特定事件的发生(例如,用户已向 stdin 输入了一些数据)。同时,主程序正在做某事,但在某个时候它会暂停执行,直到收到信号。

信号可能来自于线程,因为它检测到的事件,或者它可能是由于超时,因为我不希望它永远等下去。

我已经编写了一些代码,但它没有按预期工作......

/*
 * This code SHOULD start a thread that gets messages from stdin.
 *  If the message is a "quit", the thread exits. Otherwise it raises
 *  a signal that should be caught by the main program.
 *  The main program simply waits for the message unless a timer of
 *  5.5 seconds expires before receiving the signal from the …
Run Code Online (Sandbox Code Playgroud)

c linux signals timer wait

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

让 systemd 等待屏幕终止

有一个问题(sh screen - 等待屏幕终止)关于如何在继续之前等待屏幕会话终止。

该解决方案使用循环,但我认为不可能在系统服务脚本中使用循环。

目前我使用的是:

ExecStop=/usr/bin/screen -S starforge -p 0 -X stuff "stop^M"
ExecStop=/bin/sleep 10
Run Code Online (Sandbox Code Playgroud)

通常,我不需要整个 10 秒,但我需要某种方法来知道屏幕是否已经终止

gnu-screen wait systemd

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

无法在 docker 入口点脚本中捕获信号

我有一个 docker 入口点脚本,该脚本应该捕获发送到容器中进程的信号。主要应用程序是 tomcat - 嵌入在 docker-entrypoint.sh 中的 java 进程,该进程被传递给 dumb-init。容器中的流程映射如下所示:

root@mycontainer:/usr/local/tomcat/webapps/datarouter-example# ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 05:21 ?        00:00:00 dumb-init -- /docker-entrypoint.sh
    root         6     1  0 05:21 ?        00:00:00 bash /docker-entrypoint.sh
    root        14     6  1 05:21 ?        00:08:57 /jdk-13.0.1/bin/java -Djava.util.logging.config.file=....
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM maven:3.6.3-jdk-13 as maven_builder

WORKDIR /app
COPY . /app
RUN ["mvn","clean","install","-T","2C","-DskipTests=true"]


FROM tomcat:9.0.31-jdk13-openjdk-buster

ARG dumbInitVersion='1.2.2'

# install dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
        sudo \ …
Run Code Online (Sandbox Code Playgroud)

wait sigterm docker bash-trap tomcat9

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

在 zsh 中模拟 wait 的命令 -n 标志

我正在创建两个 shell 作业,如下所示

\n
sleep 5 &\ncompletion_pid=$!\n\nsleep 40 && exit 1 &\nfailure_pid=$! \n
Run Code Online (Sandbox Code Playgroud)\n

我可以使用's 命令的标志bash来获取第一个作业完成的退出代码-nwait

\n
# capture exit code of the first subprocess to exit\nwait -n $completion_pid $failure_pid\n
Run Code Online (Sandbox Code Playgroud)\n

然而,这个标志在我的 MacOS Big Sur 版本中似乎不可用wait(可能是因为我正在使用zsh- ?)

\n
\xe2\x96\xb6 wait -n\nwait: job not found: -n\n
Run Code Online (Sandbox Code Playgroud)\n

是否还有其他可用的替代工具可以执行此操作MacOS

\n

也许奇怪的是,在调用包含wait -nas bash myscript.sh... 的脚本时,我遇到了相同的错误。

\n

zsh wait

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