如何从Python脚本中暂停Bash脚本?

3
我希望能够通过Python脚本暂停Bash脚本。步骤如下:
  1. 我从Python脚本reader.py启动脚本writer.sh。
  2. 当writer.sh输出第三行时,我想使用reader.py中的某个命令暂停执行该脚本。
  3. 我想使用reader.py中的某个命令恢复writer.sh的执行。
这是这两个脚本,问题在于当在reader.py中执行sleep命令时,writer.sh不会暂停。所以我的问题是,当writer.sh输出"third"字符串时,我该如何暂停它?确切地说(这是我工作中的实际问题),我希望writer.sh停止运行,因为reader.py停止读取writer.sh的输出。 reader.py
import subprocess
from time import sleep

print 'One line at a time:'
proc = subprocess.Popen('./writer.sh', 
                        shell=False,
                        stdout=subprocess.PIPE,
                        )
try:                        
    for i in range(4):
        output = proc.stdout.readline()
        print output.rstrip()
        if i == 2:
            print "sleeping"
            sleep(200000000000000)
except KeyboardInterrupt:
    remainder = proc.communicate()[0]
    print "remainder:"
    print remainder

writer.sh:

#!/bin/sh

echo first;
echo second;
echo third;
echo fourth;
echo fith;

touch end_file;

相关问题是,如果脚本1输出文本行,例如script1 | script2,并且脚本2在读取第三行输入后暂停,那么在Linux上使用管道是否会暂停脚本1?
1个回答

1

要暂停bash脚本,您可以向PID发送SIGSTOP信号。

如果您想要恢复它,可以发送SIGCONT信号。

您可以使用pid = proc.pid获取子进程的pid。

请参阅man 7 signal


我如何知道何时发送此信号?我希望在writer.sh输出“third”字符串时发送它。 - Robert
你难道不想在print "sleeping"之后立即运行SIGSTOP吗? - Gilles Quénot
不,我想在 writer.sh 执行了语句“echo third;”后暂停。 - Robert
我的实际问题是,当reader.py停止读取writer.sh的输出时,我希望writer.sh停止运行。 - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接