如何从python脚本暂停bash脚本?

时间:2012-10-18 13:49:30

标签: linux subprocess

我想从python脚本暂停bash脚本,步骤如下:

  1. 我从python脚本reader.py。

  2. 启动脚本writer.sh
  3. 当writer.sh输出第三行时,我希望使用reader.py中的某个命令暂停执行此脚本。

  4. 我想在reader.py中使用一些命令恢复执行writer.sh。

  5. 以下是这两个脚本,问题是writer.shreader.py执行sleep命令时不会暂停。所以我的问题是,当输出字符串“third”时,如何暂停writer.sh?确切地说(这是我工作中的实际问题)我希望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;
    

    相关问题是,如果script1输出文本行,例如,将在Linux暂停脚本1上使用管道。 script1 | script2, 和script2在阅读第三行输入后暂停?

1 个答案:

答案 0 :(得分:2)

暂停 bash脚本,您可以将SIGSTOP信号发送到PID

如果您希望 resume ,您可以发送SIGCONT信号。

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

请参阅man 7 signal

相关问题